类使用 class 关键字声明。采用的形式为::
[attributes] [modifiers] class identifier [:base-list] { class-body }[;]
其中:
-
attributes(可选)
- 附加的声明性信息。有关属性和属性类的更多信息,请参见 17. 属性。 modifiers(可选)
- 允许的修饰符为 new、 abstract、 sealed 和四个 访问修饰符。 identifier
- 类名。 base-list(可选)
- 包含一个基类和任何实现的接口的列表,各项之间由逗号分隔。 class-body
- 类成员的声明。
备注
与 C++ 不同,C# 中仅允许单个继承。也就是说,类只能从一个基类继承实现。但是,一个类可以实现一个以上的接口。下表给出了类继承和接口实现的一些示例:
| 继承 | 示例 |
|---|---|
| 无 | class ClassA { } |
| 单个 | class DerivedClass: BaseClass { } |
| 无,继承两个接口 | class ImplClass: IFace1, IFace2 { } |
| 单个,继承一个接口 | class ImplDerivedClass: BaseClass, IFace1 { } |
只有嵌套类允许访问级别 protected 和 private。
一个类可包含下列成员的声明:
- 构造函数(请参见构造函数和析构函数、10.10 实例构造函数)
- 析构函数(请参见析构函数、10.12 析构函数)
- 常数(请参见 10.3 常数)
- 字段(请参见 10.4 字段)
- 方法(请参见 10.5 方法)
- 属性(请参见属性、10.6 属性)
- 索引器(请参见索引器、10.8 索引器)
- 运算符(请参见 C# 运算符、10.9 运算符)
- 事件(请参见事件、10.7 事件)
- 委托(请参见 delegate、15. 委托)
- 类(请参见 10. 类)
- 接口(请参见 interface、13. 接口)
- 结构(请参见 struct、11. 结构)
在 C++ 的托管扩展中,与 C# 类和 C# 结构等效的类和结构如下所示:
示例
下面举例说明如何声明类的字段、构造函数和方法。该例还说明了如何实例化对象及如何打印实例数据。在此例中声明了两个类,一个是 Kid 类,它包含两个私有字段(name 和 age)和两个公共方法。另一个是用于数据处理的 MainClass 类。
// keyword_class.cs
// class example
using System;
public class Kid
{
private int age;
private string name;
// Default constructor:
public Kid()
{
name = "N/A";
}
// Constructor:
public Kid(string name, int age)
{
this.name = name;
this.age = age;
}
// Printing method:
public void PrintKid()
{
Console.WriteLine("{0}, {1} years old.", name, age);
}
}
public class MainClass
{
public static void Main()
{
// Create objects
// Objects must be created using the new operator:
Kid kid1 = new Kid("Craig", 11);
Kid kid2 = new Kid("Sally", 10);
// Create an object using the default constructor:
Kid kid3 = new Kid();
// Display results:
Console.Write("Kid #1: ");
kid1.PrintKid();
Console.Write("Kid #2: ");
kid2.PrintKid();
Console.Write("Kid #3: ");
kid3.PrintKid();
}
}
输出
Kid #1: Craig, 11 years old. Kid #2: Sally, 10 years old. Kid #3: N/A, 0 years old.
注意:在上例中,私有字段(name 和 age)只能通过 Kid 类的公共方法访问。例如,不能通过 Main 方法用如下语句打印小孩的姓名:
Console.Write(kid1.name); // Error
但是,如果 Main 方法是 Kid 类的一个成员,则此操作是可行的。
还请注意:private 修饰符是类成员的默认修饰符。如果移除了该修饰符,仍然会得到私有成员。有关访问级别修饰符的更多信息,请参见访问修饰符。
还请注意:对于使用默认构造函数 (kid3) 创建的对象,年龄字段被初始化为零。
有关类的更多信息,请参见 10. 类。
请参见
属性是类、结构和接口的命名成员。它们提供了通过访问器读、写或计算私有字段值的灵活机制。
属性是字段的扩展并通过相同的语法来访问。与字段不同,属性不指定存储位置。相反,属性通过访问器来读写或计算它们的值。
博客介绍了类使用 class 关键字声明,对比了 C# 和 C++ 在类继承上的差异,C# 仅允许单个继承但可实现多个接口。还列举了类可包含的成员声明,通过示例说明类的字段、构造函数和方法的声明,以及对象实例化和数据打印,同时提及属性相关知识。
1011

被折叠的 条评论
为什么被折叠?



