c#中的成员与关键字

成员

成员指类中的两个分类:

数据成员:常量、字段(静态字段,实例字段)(注意:类成员变量叫做字段,字段是变量的一种,隶属于类。)

函数成员:属性、方法、嵌套类、索引器、事件、运算符、实例构造函数、析构函数、静态构造函数

关键字

权限修饰符:

public可修饰类和类型成员

任何地方都可以访问到public

internal可修饰类和类型成员

只能在同一程序集内访问到internal

private可修饰类型成员

不可被子类继承

protect可修饰类型成员

可被子类继承

它们的访问权限如下:

 

 

 

图片来源于博客:https://www.cnblogs.com/RascallySnake/archive/2010/05/14/1735704.html

static静态。可修饰类、字段、属性和方法

标记为static的字段、属性和方法可以不用创建实例,直接类名.XX使用,下面详细说明下static

先解释下静态成员和非静态成员的区别

静态成员属于所有,非静态成员属于类的实例所有

每创建一个类的实例,都会在内存中为非静态成员新分配一块内存;而静态成员属于类所有,为各个类公用,所以无论类创建了多少实例,类的静态成员在内存中都只占同一块内存。

static有三种用法,分别是用于变量前、方法前和类前

变量前:

因为在内存中一直占用的同一块内存,所以每次使用该变量所在的方法、类和自定义类时,变量值为最后一次被赋值的值(可以理解为每次调用后值都会叠加),称为静态变量

方法前:

该方法为所在类或自定义持有,而不是这个类所有,也称为静态方法。静态方法只能访问类中的静态成员,但可以创建其他类的实例(除了静态类,因为静态类无法创建实例)

深入了解的原因就是,因为静态方法在类实例化前就可以使用了,而类中非静态变量必须在实例化之后才能分配内存,这样静态方法在调用时无法判断非静态变量使用的内存地址,所以无法使用。

实际上静态变量和静态方法效率上要比实例高,因为静态方法和静态变量创建后始终使用同一块内存,而使用实例的方式会创建多个内存。但这样带来的缺点就是不能自动进行销毁,而实例化的则可以做销毁。

ps:所以在静态方法中要调用非静态的方法,需要创建非静态方法所在的类的实例,然后调用类中的那个非静态方法。

类前:

静态类无法创建实例。类下的方法全是静态方法,类下的非静态方法都是无法使用的。所以如果自定义的静态类中想创建public方法时不允许的(vs code中会提示错误,加上static即可)

以上参考自大佬博客:https://www.cnblogs.com/fsspring/p/9510828.html,写的非常好,看完茅塞顿开

posted @ 2020-06-09 20:07  穷在闹市  阅读(238)  评论(0)    收藏  举报