class类型是引用类型。创建类对象时,会在堆区为该对象分配内存。所分配的内存会由垃圾回收器(GC)自动管理,无需手动释放。
1、声明类
我们使用class
关键字来声明类,语法:
访问修饰词(public/private/internal) 修饰符(static/abstract/sealed) class 类名字
{
}
实例:
public class Person
{
public string Name {get; set;} = "";
public int Age {get; set;}
}
class
关键字前修饰符如果不显示地应用public
修饰符,会隐式添加interal
修饰符,像 string Name
这种成员则隐式添加private
修饰符。
class成员:
- 字段(用于存储数据)
- 常量字段:数据永远不会改变。
- 只读字段:在类实例化后数据不能改变,但是可以在实例化时不更改数据。
- 事件:数据引用一个或多个方法,方法在发生事件时执行。
- 方法(用于执行语句)
- 构造函数:使用
new
关键字实例化类时执行的语句。在没有手动创建任何构造函数时,都会有一个默认的无参构造函数。一但手动创建了,则不会再有默认的无参构造函数了,如要使用需要手动添加一个。 - 属性:其行为类似于字段,但与字段不同的是,属性通过访问器实现。访问器用于定义访问属性或为属性赋值时执行的语句。
- 索引器:使用数组语法[]获取或设置数据时执行的语句。
- 运算符:使用+或-之类的运算符时执行的语句。
- 构造函数:使用
2、实例化和使用类
new
关键字用来为对象分配内存,并初始化数据。
var Alice = new Person();
Alice.Name = "Alice";
Alice.Age = 1;
Console.WriteLine(Alice.Name);
3、类的继承
类可以继承自其他任何未定义为 sealed
的类。每个类只能继承一个类和实现多个接口。
注意:无法继承父类的构造函数。
var student = new Student();
student.Name = "小明";
student.Age = 8;
student.Grade = "三年级";
Console.WriteLine($"{student.Name}今年{student.Age}岁了,在读{student.Grade}");
public class Person
{
public string Name { get; set; } = "";
public int Age { get; set; }
}
public class Student : Person
{
public string? Grade { get; set; }
}
Student 类继承 Person 类,可以使用 Person 类中非private
修饰的字段和方法。Person 可以称为 Student 的基类或超类;Student可以称为 Person 的子类或派生类。
C#中全部的类都直接或间接继承自System.Object
类。我们通常不需要类来声明继承 Object ,因为继承是隐式的。如上面的 Person 类。
4、访问修饰符
所有类型和类型成员都具有可访问性级别。 该级别可以控制是否可以从你的程序集或其他程序集中的其他代码中使用它们。
访问修饰符 | 描述 |
---|---|
public | 在任何地方都可以访问 |
private | 只有同一 class 或 struct 中的代码可以访问该类型或成员。 |
protected | 只有同一 class 或者从该 class 派生的 class 中的代码可以访问该类型或成员。 |
internal | 同一程序集中的任何代码都可以访问该类型或成员 |
protected internal | 该类型或成员可由对其进行声明的程序集或另一程序集中的派生 class 中的任何代码访问。 |
private protected | 该类型或成员可以通过从 class 派生的类型访问,这些类型在其包含程序集中进行声明。 |
4.1、访问修饰符摘要表
调用方的位置 | public | protected internal | protected | internal | private protected | private |
---|---|---|---|---|---|---|
在类内 | ✔️️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
派生类(相同程序集) | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ❌ |
非派生类(相同程序集) | ✔️ | ✔️ | ❌ | ✔️ | ❌ | ❌ |
派生类(不同程序集) | ✔️ | ✔️ | ✔️ | ❌ | ❌ | ❌ |
非派生类(不同程序集) | ✔️ | ❌ | ❌ | ❌ | ❌ | ❌ |
该文章亦发表在个人网站,欢迎访问收藏:
网站链接:www.bitsof.cn
本文链接:C#类(Class)的使用 - BitsOf