美文网首页
C# 结构和访问修饰符

C# 结构和访问修饰符

作者: JeetChan | 来源:发表于2019-08-15 17:50 被阅读0次

声明

本文内容来自微软 MVP solenovex 的视频教程——真会C#?- 第3章 创建类型,大致和第 8 课—— struct 和 访问修饰符 对应。可在 GitHub 中查看 C# 视频教程的配套PPT

本文主要包括以下内容:

  1. 结构(struct)
  2. 访问修饰符(Access Modifiers)

结构(struct)

struct和class差不多,但是有一些不同:

  1. struct是值类型,class是引用类型
  2. struct不支持继承(除了隐式的继承了 object,具体点就是 System.ValueType)
public struct Point
{
    int x, y;
    public Point (int x, int y) { this.x = x; this.y = y; }
}
...
Point p1 = new Point (); // p1.x and p1.y will be 0
Point p2 = new Point (1, 1); // p1.x and p1.y will be 1

结构的成员

类能有的成员,结构也可以有,但是以下几个不行:

  1. 无参构造函数
  2. 字段初始化器
  3. 终结器
  4. virtual 或 protected 成员

结构的构建

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

public struct Point
{
    int x = 1; // Illegal: field initializer
    int y;
    public Point() {} // Illegal: parameterless constructor
    public Point (int x) {this.x = x;} // Illegal: must assign field y
}

访问修饰符(Access Modifiers)

访问修饰符是关键字,用于指定成员或类型已声明的可访问性。

5 个访问修饰符

  1. public,完全可访问。enum 和interface 的成员默认都是这个级别
  2. internal,当前 assembly 或朋友 assembly 可访问,非嵌套类型的默认访问级别
  3. private,本类可访问。class 和 struct 的成员的默认访问级别
  4. protected,本类或其子类可以访问
  5. protected internal,联合了 protected 和 internal 的访问级别
class Class1 {} // Class1 is internal (default)
public class Class2 {}

class ClassA { int x; } // x is private (default)
class ClassB { internal int x; }

class BaseClass
{
    void Foo() {} // Foo is private (default)
    protected void Bar() {}
}
class Subclass : BaseClass
{
    void Test1() { Foo(); } // Error - cannot access Foo
    void Test2() { Bar(); } // OK
}

朋友 Assemblies

通过添加 System.Runtime.CompilerServices.InternalsVisibleTo 这个 Assembly 的属性,并指定朋友 Assembly 的名字,就可以把 internal 的成员暴露给朋友 Assembly。[assembly: InternalsVisibleTo ("Friend")]

如果朋友 Assembly 有 Strong name,那么就必须指定其完整的 160 字节的 public key。[assembly: InternalsVisibleTo ("StrongFriend, PublicKey=0024f000048c...")]

类型限制成员的访问级别

外层决定了内层最大访问级别。class C { public void Foo() {} }

访问修饰符的限制

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

class BaseClass { protected virtual void Foo() {} }
class Subclass1 : BaseClass { protected override void Foo() {} } // OK
class Subclass2 : BaseClass { public override void Foo() {} } // Error

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

参考

Structs (C# Programming Guide)
Classes and Structs (C# Programming Guide)
struct (C# Reference)
Access Modifiers (C# Programming Guide)
Access Modifiers (C# Reference)

相关文章

  • C# 结构和访问修饰符

    声明 本文内容来自微软 MVP solenovex 的视频教程——真会C#?- 第3章 创建类型,大致和第 8 课...

  • C# 访问修饰符

    C# 【方法】默认访问级别 : private C# 【类】和【结构体】默认访问级别 : internal 1.命...

  • C# 之访问修饰符

    一个访问修饰符定义了一个类的范围和可见性 C#有四种常用的访问修饰符:public、private、interna...

  • C#类的访问修饰符用法分析

    这篇文章主要介绍了C#类的访问修饰符用法,较为详细的分析了C#类的访问修饰符概念与用法,具有一定的参考借鉴价值,需...

  • 语法基础(三十七)-修饰符总结

    C#的访问修饰符 修饰符含义private只能在当前类中访问public同一程序集(DLL或EXE)中的任何其他代...

  • 2017.10.24 C#

    今天老师讲课结构和枚举 结构的声明 访问修饰符 struct 结构名 { 定义结构成员 } 注意,结构体定义成...

  • c#面向对象9--c#中的访问修饰符

    c#中的访问修饰符 public : 公共的,公开的private:私有的,只能在当前类的内部访问protecte...

  • C#(11)结构体 访问修饰符

    8yue18 结构体 结构体是一种值类型,用来封装小型相关变量组,不可以继承,所以不可以写 protected 结...

  • #30天专注成长计划#-DAY9-c#

    1、c#中的访问修饰符 public:公开的,公共的 private:私有的,只能在当前类的内部访问 protec...

  • C#访问修饰符

    参考:https://www.runoob.com/csharp/csharp-encapsulation.htm...

网友评论

      本文标题:C# 结构和访问修饰符

      本文链接:https://www.haomeiwen.com/subject/jxhtsctx.html