C#中的类和继承
📘公众号「DotNet学习交流」,分享学习DotNet的点滴。
通过继承我们可以定义一个新类,新类纳入一个已经声明的类并进行扩展。
可以使用一个已经存在的类作为新类的基础。已存在的类称为基类(base class),新类称为派生类(derived class)。
基类规格说明:由冒号和后面跟着用作基类的类名称组成。
派生类被描述为直接基础列出的基类。
相关概念如下所示:
继承的成员可以被访问,就像是它们是派生类自己声明的一样。
在派生类中访问基类中的字段和方法的例子
class SomeClass //基类
{
public string field1 = "base class field";
public void Method1(string value)
{
Console.WriteLine($"Base class -- Method1: {value}");
}
}
class OtherClass : SomeClass //派生类
{
public string field2 = "derived class field";
public void Method2(string value)
{
Console.WriteLine($"Derived class -- Method2: {value}");
}
}
internal class Program
{
static void Main(string[] args)
{
OtherClass oc = new OtherClass();
oc.Method1(oc.field1);
oc.Method1(oc.field2);
oc.Method2(oc.field1);
oc.Method2(oc.field2);
}
}
运行结果如下所示:
所有的类都派生自object类
在C#中除了特殊的类object,所有的类都是派生类,即使没有基类规格说明。
在C#中一个类声明的基类规格说明中只能有一个单独的类。这称为单继承。
虽然类只能直接继承一个基类,但继承的层次没有限制。
隐藏继承的成员
可以使用new修饰符来屏蔽基类成员,代码如下U所示:
class SomeClass //基类
{
public string field1 = "base class field";
public void Method1(string value)
{
Console.WriteLine($"Base class -- Method1: {value}");
}
}
class OtherClass : SomeClass //派生类
{
//使用new修饰符屏蔽基类成员
new public string field1 = "derived class field";
new public void Method1(string value)
{
Console.WriteLine($"Derived class -- Method2: {value}");
}
}
internal class Program
{
static void Main(string[] args)
{
OtherClass oc = new OtherClass();
oc.Method1(oc.field1);
}
}
运行结果如下所示:
访问基类成员
可以使用基类访问(base access)表达式访问隐藏的继承成员,基类访问表达式由关键字base后面跟着一个点和成员的名称组成。
访问隐藏的基类成员的例子
代码如下:
class SomeClass //基类
{
public string field1 = "base class field";
}
class OtherClass : SomeClass //派生类
{
new public string field1 = "derived class field";
public void PrintField1()
{
Console.WriteLine(field1); //访问派生类
Console.WriteLine(base.field1); //访问基类
}
}
internal class Program
{
static void Main(string[] args)
{
OtherClass oc = new OtherClass();
oc.PrintField1();
}
}
运行结果如下所示: