CS3L3——成员变量和访问修饰符
CS3L3——成员变量和访问修饰符
本章代码关键字
1 | public //公共的 自己(内部)和别人(外部)都能访问和使用 |
成员变量
成员变量申明在类语句块中,用来描述对象的特征,成员变量可以是任意变量类型,数量不做限制
修饰类成员的访问修饰符
我们在 结构体 已经接触了访问修饰符,在这里修饰类成员变量和方法,它决定了成员变量或者方法是否能被外部使用
-
public
—— 公共的 自己(内部)和别人(外部)都能访问和使用 -
private
—— 私有的 自己(内部)才能访问和使用 不写访问修饰符就默认private
-
protected
—— 保护的 自己(内部)和子类(继承)才能访问和使用,这个访问修饰符在讲到 继承 时会展现作用
目前它们决定类内部的成员 的 访问权限
这里是修饰类的成员的访问修饰符,对于修饰类的访问修饰符详见 CS3L22——命名空间 的:((20240904193522-f3rq819 ‘internal’))
成员变量的声明
成员变量是否赋值根据需求来定,如果赋值,则该变量会在实例化时就会自动赋值,相当于指定这个成员变量的默认值
1 | enum E_Sex |
和结构体不同,类可以声明自己类型的成员变量,因为在声明类变量不赋值默认是 null
,不会调用构造函数,但是不能对它实例化!
注意!
如果要在类中申明一个与自己相同类型的成员变量时 不可以对它实例化!!!!!(
null
除外)
举例来说 我有一个女朋友 而我的女朋友里还有一个女朋友 这种抽象是错误的
程序运行来说 如果在类里实例化 与自己相同类型的成员变量
那么会导致实例化该类时 类内部的成员变量会再次实例化该类,造成无限递归,导致栈溢出!程序崩溃!!!下面这段代码只要执行就会报错:
1
2
3
4
5
6
7
8
9
10
11
12 class Person
{
public Person girlFriend = new Person(); // error: Stack overflow.
}
internal class Program
{
static void Main(string[] args)
{
Person p = new Person();
}
}输出:
1
2
3
4
5
6 Stack overflow.
Repeat 19282 times:
--------------------------------
at lesson2_封装_成员变量和访问修饰符.Person..ctor()
--------------------------------
at lesson2_封装_成员变量和访问修饰符.Program.Main(System.String[])
成员变量的使用和初始值
在上文的类声明中,虽然我们没有给成员变量赋值,但是它们其实都是有自己的默认值的
- 值类型初始值 数字类型 默认值都是0,
bool
类型false
,char
类型''
(空字符) - 引用类型初始值 是
null
可以用 default()
来获取变量类型的默认初始值
1 | Console.WriteLine(default(int)); |
输出:
1 | 0 |
在类的外部要调用成员变量,类对象需要先实例化,且这个成员变量必须是 public
的(子类的情况到继承时会说)
外部想要调用类对象的成员变量,只需要 对象.成员变量
即可
1 | class Person |
输出:
1 | 20 |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 文KRIFE齐的博客!