C# 类成员详解:域与方法

3星 · 超过75%的资源 需积分: 17 6 下载量 127 浏览量 更新于2024-09-17 收藏 105KB DOC 举报
"C#类成员包括域(成员变量)、方法以及一些特殊的关键字,如`readonly`、`static`、`virtual`、`abstract`、`override`和`extern`等,这些关键字用于控制类成员的访问性、可变性和继承行为。" 在C#编程语言中,类是构建对象的基础,而类成员则定义了类的行为和状态。以下是关于C#类成员的详细解释: 1. **定义域(成员变量)** - **公共成员**:如示例所示,`public int MyInt` 是一个公共成员,可以在类的任何地方被访问。创建类的对象后,可以通过对象实例进行初始化或修改,如 `myClass.MyInt = 1`。 - **只读字段(readonly)**:使用 `readonly` 关键字声明的字段,如 `public readonly int MyInt`,只能在构造函数或初始化语句中赋值,之后不能再修改。 - **静态成员(static)**:使用 `static` 关键字声明的成员属于类本身而非类的实例,例如 `public static int MyInt`,可以通过类名直接访问,而无需实例化对象。 2. **定义方法** - **普通方法**:方法定义了类的行为。在示例中,`GetString()` 方法返回一个字符串。可以通过对象实例调用,如 `myClass.GetString()`。 - **静态方法**:使用 `static` 关键字的方法,如 `GetString()`,只能通过类名调用,不能通过对象实例调用。如 `MyClass.GetString()`。 - **方法修饰符**: - `virtual`:允许子类重写此方法,如 `virtual void MyMethod()` - `abstract`:只有在抽象类中使用,表示方法没有实现,子类必须重写,如 `abstract void MyMethod()` - `override`:当子类重写基类的虚拟方法时使用,确保正确覆盖,如 `override void MyMethod()` - `extern`:表示方法的实现位于其他地方(通常为非托管代码),如 `extern void NativeMethod()` 3. **方法重载(Overloading)** - 方法重载是指在同一个类中,可以有多个同名但参数列表不同的方法。例如: ```csharp public class MyBaseClass { public virtual void Print(int number) { Console.WriteLine(number); } public virtual void Print(string text) { Console.WriteLine(text); } } ``` 这里,`Print` 方法被重载了两次,一次接受整型参数,一次接受字符串参数。 4. **构造函数** - 构造函数用于初始化新创建的对象。在示例中,`MyClass` 有一个无参构造函数,用于给 `readonly` 字段赋值。 C# 类成员的定义涉及变量、方法以及一系列关键字,这些都用于构建类的结构并控制其行为和访问权限。理解和熟练运用这些概念对于编写高效且可维护的 C# 代码至关重要。
2011-11-14 上传
点和直线类(综合型题目) (1)创建C#控制台应用程序L4_1。 (2)在程序中新建一个点类CzPoint,为其定义两个double类型的私有字段成员x和y,分别表示点的横坐标和纵坐标。 (3)为CzPoint定义两个公有属性X、Y,分别用于封装对字段x和y的读写访问。 (4)定义CzPoint的带参数构造函数,在其中对字段x和y进行初始化。 (5)为CzPoint定义公有方法Move,用于按指定的水平距离和垂直距离移动坐标点。 (6)对CzPoint类进行相等和不相等操作符重载。两个坐标点相等,是指它们的横坐标和纵坐标都相等。 (7)在程序主方法中创建两个坐标点对象,判断它们是否相等;而后将第一个坐标点移动到第二个坐标点上,再判断它们是否相等。 (8)在程序中再新建一个直线类CzLine,为其定义两个double类型的字段成员a 和b,分别表示直线的斜率和截距;再定义字段封装属性A和B,但它们都是只读的。 (9)为CzLine定义两个构造函数,一个根据斜率和截距来创建直线对象,另一个则根据两个CzPoint对象来构造直线对象(直线穿过这两个点)。后一个的参考源代码如下(因涉及数学公式,故给出代码): public CzLine(CzPoint p1,CzPoint p2) { this.a=(p2.Y-p1.Y)/(p2.X-p1.X); this.b=p1.Y-this.a*p1.X; } (10)为CzLine定义公有方法Move,但它只用于平移直线,而不改变直线的斜率(即平移后的直线与原来的直线平行)。再为其定义公有方法Contains,用于判断某点是否在该直线上。 (11)类似的,为CzLine重载相等和不相等操作符。 (12)最后在程序主方法中采用不同的方式创建直线对象,并编译运行程序,测试它们的使用效果。