C#基本概念,常看常新

类和结构
类和结构实际都是创建对象的模板,每个对象都包含数据,并提供处理和访问数据的方法。类定义了每个类对象(实例)可以包含什么数据和功能。
结构在内存中的存储方式、访问方式和一些特性(结构不支持继承)与类不同。类是存储在堆heap上的引用类型,结构是存储在堆栈stack上的值类型。
类和结构都是使用关键字new来声明实例。

如果是需要一个小的数据结构,由于性能原因最好使用结构
结构的构造函数是编译器提供的无参数的默认构造函数。这是不容许改变的。
结构在使用new运算符与其他引用类型的工作方式不同。new不分配堆中的内存。 而是调用相对应的构造函数

ref参数
通过指传送变量是默认的,也可以强制使参数通过引用的方法传送给方法,为此需要使用ref参数,如果把一个参数传给方法,且这个方法的输入参数前面带有ref关键字,则该方法对变量所做的任何改变都会影响原来的对象的值。调用该方法的时候也需要添加ref。
out关键字
c#要求变量在被引用的时候必须有个初始值。编译器使用out关键字进行初始化,当在方法的输入参数前面加上out关键字时,传递给该方法的变量可以不初始化,该变量通过引用传送,所以在从被调用的方法中返回时,方法对该变量的任何变化都会保留下。调用时也需要使用out

方法的重载
为了重载方法,只需要声明同名但参数个数或类型不同即可。使用重载是因为c#不支持可选参数。
构造方法
是一个与类同名的没有返回值的方法,也不要void!!!方法都是有返回类型,即使是使用void。
一般情况,如果没有提供任何构造函数,编译器会在后台自动创建一个默认的构造函数。会把所有的成员字段初始化为一个标准的默认值,如:0或false
可以给构造函数进行任意多个重载。
静态构造函数
第一使用的时候执行一次,如果多个类都有静态构造函数,先执行那个都是不确定的。

 

继承
实现继承和接口继承
实现继承:表示一个类派生于一个基类型,拥有该基类型的所有成员字段。派生类型的每个函数都采用基类型的实现代码,除非在派生类型的定义中指定重写该函数的事项代码。在需要给现有的类型添加功能,或许多个相关的类型共享一组重要的公共功能的时候,这种继承是非常有效的。

接口继承  一个类型只继承了函数的签名,没有继承任何实现代码。在需要指定该类型具有某些可用的特性的时候,最后使用这种类型继承。接口继承常常被看做是提供了一种契约:让类型派生于接口,来保证为客户提供某个功能。

多重继承:c#不支持多重实现继承,而允许类型派生于多个接口。这说明,c#可以派生于另一个类和任意多个接口。

结构不支持实现继承,但支持接口继承,构总是派生于System.VlaueType

如果在类定义中没有指定基类,c#编译器就假定Sysrtem.Object是基类。

虚方法
把一个基类函数声明为virtual,该函数就可以在任何派生类中重写。也可以把属性什么为virtual,对于虚方法或重写属性,语法与非虚属性是相同的,但要在定义中加上关键字virtual。

C#中的虚函数概念与标准的oop概念相同,可以再派生类中重写虚函数。在调用方法时,会对调用对象类型的合适方法。在派生类的函数重写另一个函数时,要使用override关键字显示声明。
成员字段和静态函数都不能声明为virtual。因为这个概念只对类中的实例函数成员有意义。

调用函数的基类版本
c#有一种特殊的语法用于从派生类中调用方法的基本版本:base.<MethodName>()  

抽象类和抽象函数
抽象类不能实例化,抽象函数没有执行代码,必须在非抽象的派生类中重写,显然,抽象函数也是虚拟的(但不需要提供virtual关键字),如果类包含了抽象函数,该类也是抽象的,也必须声明为抽象的。
密封类和密封方法sealed  对与类,不能继承该类;对于方法表示不能重写该方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值