• C#基础总结二


    C#数据类型转换
    C#数据类型的转换:转换的时候需要考虑数据是否兼容 分为隐式转换和显示转换 1.0 隐式转换:从存储范围小的数据类型转换为存储范围大的数据类型,可能会造成数据精度下降,但是不会造成数量的丢失。 需要额外注意的是所有的整形是可以隐式转换为浮点型是的。
    2.0 显示转换:从存储范围大的数据类型转换为存储范围小的数据数据类型,可能会导致数据丢失和引发异常 其实转换就是将数据从某一个数据类型的数据转换为另外一个数据类型的数据,数据的大小是必须要符合定义的规范的。 比如说将一个 int int1=130; 将它显示转换为 short数据类型是不可以的,因为130不在short的存储范围内。
    类型转换常用的方法: Parse方法:字符串类型转换,这个方法仅仅可以将字符串转换为任意数据类型。 Convert方法:数据类型转换,这个方法可以将任意数据类型转换为任意数据类型,会引起数据类型的精度丢失。
    理解装箱与拆箱: 装箱就是把值类型的数据转换为引用类型,拆箱就是把引用类型的数据转换为值类型
    数组
    数组的学习: 什么是数组?数据就是存放同一数据类型的一个组。例如 string[] strArr={“str1”,“str2”,123}; 中,123就不属于同一数据类型 学习数组,只要学习的就是数组的创建方法、数组的获取以及一些官方处理数组的方法。 数组分为了一维数组和多维数组。 数组的定义: 数据类型[] 数组名称=new 数据类型[]; 数组可以在定义的时候进行初始化,也可以在后面进行初始化。 初始化例子:str[0]=“第一个值初始化” 我们可以利用官方定义好的一些处理数组的方法来操作数组, 比如说数组的分割、数组的冒泡排序、数组的遍历循环、数组的清空等等
    枚举类型
    C#中枚举类型和结构类型都是特殊的值类型,应用也是比较广泛的。
    枚举的定义:
    访问修饰符 enum 枚举名称 : 数据类型{ 值1,值2,…}
    枚举定义的注意点:
    1.0 枚举不能定义到方法当中,定义在类中或命名空间中
    2.0 枚举的数据类型只能是整数类型(byte、short、int、long)
    3.0 使用枚举时,需要使用的是 类名.枚举名称 的格式进行使用
    4.0 枚举的值是固定的常量值
    5.0 枚举可以遍历循环
    枚举的值的初始值是从0开始的,系统会自动为枚举指定值,我们也可以为枚举值赋值,例如给第一个枚举值赋值为3,第二个没有赋值的情况下,则第二个枚举值的值为4。
    结构体类型
    什么是结构体类型?结构体类型是一个与类非常相似的东西,但是它是属于值类型的。
    结构体的定义:
    访问修饰符 struct 结构体名称 {结构体成员 }
    结构体成员包括字段、属性、方法、事件等等
    注意:
    1.0 结构体里面也能编写构造方法,但是必须带参数,并且为结构体中的字段赋值。因为每个结构体已经默认创建了一个无参数的构造函数。
    2.0 不能在声明成员属性时对它们进行初始化,静态属性和常量除外。
    3.0 结构体不能从其他类或结构体中继承,也不能作为类的基类,但是结构体可以实现接口
    4.0 不能在结构体内声明析构函数
    继承
    继承是面对对象的特征之一,在程序设计中最重要的概念之一。
    主要用于解决代码重用的问题,并且在C# 仅仅支持单继承,单继承意思就是每个派生类只能继承一个基类。简单来说就是将公共的代码抽出来存放到一个类里面,当其他类要用到这里面公共部分的代码的时候,就继承该类,这样就可以使得代码复用,减少代码量。
    基类:就是被继承的类,也是父类
    派生类:就是继承类,也就是子类
    C#继承的特点:
    1.0 派生类是对基类的拓展,派生类可以添加新的成员,但是不能移除已经继承的成员定义
    2.0 继承是可以传递的,假设B继承了A,C继承B,相当于C 既继承了B,也继承了A
    3.0 构造函数和析构函数不能被继承
    4.0 派生类如果定义了同名的成员,则会覆盖基类已经定义好的成员,这并不是删除了基类的成员,只是不能进行访问了。
    5.0 派生类只能继承一个基类,但是可以通过接口实现多重继承
    注意点:理解继承关系中构造器之间的关系
    一般默认情况下,在子类中 ,都会自动调用父类的无参构造器。
    但是如果需要调用父类带参数的构造器的时候,需要在实例化子类的时候传递参数给到子类的带参数的构造器,然后再通过“:base(参数)”的格式传递参数给到父类的构造器。
    说明了如果父类声明了一个带参数的构造器的话(并且父类中没有声明无参的构造器),子类中也应该声明一个带参数的构造器。如果没有给父类的带参数的构造器传参的话,系统默认只会调用父类的无参构造器。
    但是无论有参还是无参的构造器,代码执行的顺序都是先执行父类的构造器,再执行子类的构造器的。
    总结起来就是:
    只要父类中存在不带参的构造函数,不管子类中存在带参的或者不带参的构造函数时,都是能正常编译的。
    但是只要父类不存在无参的构造函数并且只有有参的构造函数的时候,子类都必须存在带参的构造函数去继承父类。

  • 相关阅读:
    Python-函数
    主流的开发语言和开发环境介绍
    canvas绑定键盘事件不会生效 + 解决办法
    旋转框目标检测mmrotate v0.3.1入门
    SpringBoot Application事件监听的实现方案(动态写入yml)
    linux查看服务器开放的端口和启用的端口五种方式
    百度飞桨“万有引力”2022首站落地苏州,全面启动中小企业赋能计划
    强化学习和近似动态规划的区别与联系是什么,他们俩是一回事吗
    【设计模式】Java设计模式 - 享元模式
    Linux 批量杀死进程(详细版本)
  • 原文地址:https://blog.csdn.net/weixin_47221159/article/details/126234936