类与结构
C# 是面向对象的编程语言,它使用类和结构来实现类型(如 Windows 窗体、用户界面控件和数据结构等)。典型的 C# 应用程序由程序员定义的类和 .NET Framework 的类组成。
C# 提供了许多功能强大的类定义方式,例如,提供不同的访问级别,从其他类继承功能,允许程序员指定实例化的操作。
一、类声明
类是 C# 中功能最为强大的数据类型。像结构一样,类也定义了数据类型的数据和行为。然后,程序员可以创建作为此类的实例的对象。与结构不同,类支持继承,而继承是面向对象编程的基础部分。
1 声明类
类是使用 class 关键字来定义的,如下面的示例所示:
public class Customer
...{
private int x=10, y=15;
public int ride()
...{
return x*y;
}
}
class mainclass
...{
static void Main()
...{
Customer s=new Customer();
System.Console.WriteLine(s.ride());
}
}
说明:
class 关键字前面是访问修饰符。在该例中,使用了 public,这表示任何人都可以基于该类创建对象。类的名称位于 class 关键字的后面。一对花括号中的内容叫类体,用于定义行为和数据。类的字段、属性、方法和事件统称为“类成员”。
常用的类访问修饰符如下所示:
1 public
public关键字是类型和类型成员的访问修饰符。公共访问是允许的最高访问级别。对访问公共成员没有限制。
2 private
private 关键字是一个成员访问修饰符。私有访问是允许的最低访问级别。私有成员只有在声明它们的类和结构体中才是可访问的
3 protected
protected 关键字是一个成员访问修饰符。受保护成员在它的类中可访问并且可由派生类访问
4 internal
internal 关键字是类型和类型成员的访问修饰符。只有在同一程序集的文件中,内部类型或成员才是可访问的。
二、结构
结构是使用 struct 关键字定义的,struct 类型是一种值类型,通常用来封装小型相关变量组,例如,矩形的坐标或库存商品的特征。下面是结构的声明语法。
例如:
public struct PostalAddress
{
......
}
结构与类共享几乎所有相同的语法,结构适于表示 Point, Color 等轻量对象。尽管这些也可以表示为类,但在某些情况下,使用结构更有效。结构有如下特点:
1 结构是值类型,而类是引用类型。但通过一个称为装箱的过程可以将值类型转换为引用类型。
2 向方法传递结构时,结构是通过传值方式传递的,而不是作为引用传递的。
3 与类不同,结构的实例化可以不使用 new 运算符。
4 结构不能声明默认构造函数或析构函数。结构可以声明带有参数的构造函数。
5 一个结构不能从另一个结构或类继承,而且不能作为一个类的基。
6 所有结构都直接继承自 System.ValueType,后者继承自System.Object。
7 结构可以实现接口。
8 在结构中初始化实例字段是错误的。
★结构示例1
public struct CoOrds
...{
public int x, y;
public CoOrds(int p1, int p2)
...{
x = p1;
y = p2;
}
}
class TestCoOrds
...{
static void Main()
...{
CoOrds coords1 = new CoOrds();
CoOrds coords2 = new CoOrds(10, 10);
System.Console.Write("CoOrds 1: ");
System.Console.WriteLine("x = {0}, y = {1}",coords1.x, coords1.y);
System.Console.Write("CoOrds 2: ");
System.Console.WriteLine("x = {0}, y = {1}",coords2.x, coords2.y);
}
}
★结构示例2
本示例说明了结构特有的一种功能。它在不使用 new 运算符的情况下创建 CoOrds 对象。如果将 struct 换成 class,程序将不会编译。
using System;
public struct CoOrds
...{
public int x, y;
public CoOrds(int p1, int p2)
...{
x = p1;
y = p2;
}
}
class TestCoOrdsNoNew
...{
static void Main()
...{
CoOrds coords1;
coords1.x = 10;
coords1.y = 20;
Console.Write("CoOrds 1: ");
Console.WriteLine("x={0},y={1}", coords1.x, coords1.y);
}
}
★结构示例3
public struct CoOrds
...{
public string x;
public CoOrds(string p)
...{
x = p;
}
}
class TestCoOrds
...{
static void Main()
...{
CoOrds a = new CoOrds("ssssss");
System.Console.Write(a.x);
}
}