CSharp Basic Tutorial Chapter-3-8 struct 和访问修饰符


Struct

  • struct和class差不多,但是有一些不同:
  • struct是值类型,class是引用类型
  • struct不支持继承(除了隐式的继承了object,具体点就是System.ValueType)

struct的成员

class能有的成员,struct也可以有,但是以下几个不行:

  • 无参构造函数
  • 字段初始化器
  • 终结器
  • virtual或protected成员

struct的构建

  • struct有一个无参的构造函数,但是你不能对其进行重写。它会对字段进行按位归零操作。
  • 当你定义struct构造函数的时候,必须显式的为每个字段赋值。
  • 不可以有字段初始化器。

structbuild

有三个错误的例子
errorcase
字段初始化 无参数构造函数 只有一个参数

5个访问修饰符

  • public,完全可访问。enum和interface的成员默认都是这个级别
  • internal,当前assembly或朋友assembly可访问,非嵌套类型的默认访问级别
  • private,本类可访问。class和struct的成员的默认访问级别。
  • protected,本类或其子类可以访问。
  • protected internal,联合了protected和internal的访问级别。

describe

朋友assembly

  • 通过添加System.Runtime.CompilerServices.InternalsVisibleTo 这个Assembly的属性,并指定朋友Assembly的名字,就可以把internal的成员暴露给朋友Assembly。

friendassembly

  • 如果朋友Assembly有Strong name,那么就必须指定其完整的160字节的public key。

friendassembly2

类型限制成员的访问级别会

class C {public void Foo() {} }

访问修饰符的限制

  • 当重写父类的函数时,重写后的函数和被重写的函数的访问级别必须一致

AccessLimit

  • 有一个例外:当在其它Assembly重写protected internal的方法时,重写后的方法必须是protected。

文章作者: Chaoqiang
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Chaoqiang !
评论
 上一篇
CSharpb Basic Tutorial Chapter-3-9 接口简介 CSharpb Basic Tutorial Chapter-3-9 接口简介
什么是接口 接口与class类似,但是它只为其成员提供了规格,而没有提供具体的实现 接口的成员都是隐式抽象的 一个class或者struct可以实现多个接口 接口的实现 接口的成员都是隐式public的,不可以声明访问修饰符 实现接口对
下一篇 
CSharp Basic Tutorial Chapter-3-7 object类型 CSharp Basic Tutorial Chapter-3-7 object类型
object类型 object(System.Object)是所有类型的终极父类。 所有类型都可以向上转换为object。 后进先出,压栈 出栈 object是引用类型 但值类型可以转化为object,反之亦然。(类型统一) sta
  目录