Struct
- struct和class差不多,但是有一些不同:
- struct是值类型,class是引用类型
- struct不支持继承(除了隐式的继承了object,具体点就是System.ValueType)
struct的成员
class能有的成员,struct也可以有,但是以下几个不行:
- 无参构造函数
- 字段初始化器
- 终结器
- virtual或protected成员
struct的构建
- struct有一个无参的构造函数,但是你不能对其进行重写。它会对字段进行按位归零操作。
- 当你定义struct构造函数的时候,必须显式的为每个字段赋值。
- 不可以有字段初始化器。
有三个错误的例子
字段初始化 无参数构造函数 只有一个参数
5个访问修饰符
- public,完全可访问。enum和interface的成员默认都是这个级别
- internal,当前assembly或朋友assembly可访问,非嵌套类型的默认访问级别
- private,本类可访问。class和struct的成员的默认访问级别。
- protected,本类或其子类可以访问。
- protected internal,联合了protected和internal的访问级别。
朋友assembly
- 通过添加System.Runtime.CompilerServices.InternalsVisibleTo 这个Assembly的属性,并指定朋友Assembly的名字,就可以把internal的成员暴露给朋友Assembly。
- 如果朋友Assembly有Strong name,那么就必须指定其完整的160字节的public key。
类型限制成员的访问级别会
class C {public void Foo() {} }
访问修饰符的限制
- 当重写父类的函数时,重写后的函数和被重写的函数的访问级别必须一致
- 有一个例外:当在其它Assembly重写protected internal的方法时,重写后的方法必须是protected。