【OOP编程(C#继承介绍和使用示例)】继承是OOP(面向对象编程)的重要支柱。这是C#中的一种机制, 通过该机制, 一个类可以继承另一类的功能(字段和方法)。
重要术语:
- 超类:继承了其功能的类称为超类(或基类或父类)。
- 子类:继承另一个类的类称为子类(或派生类, 扩展类或子类)。除了超类的字段和方法, 子类还可以添加自己的字段和方法。
- 可重用性:继承支持"可重用性"的概念, 即, 当我们要创建一个新类并且已经有一个包含某些所需代码的类时, 我们可以从现有类中派生新类。通过这样做, 我们可以重用现有类的字段和方法。
用于继承的符号是:.
语法如下:
class derived-class : base-class
{
//methods and fields
.
.
}
例子:在下面的继承示例中, GFG类是基类, lsbin类是对GFG类进行扩展的派生类, 而Sudo类是用于运行程序的驱动程序类。
//C# program to illustrate the
//concept of inheritance
using System;
namespace ConsoleApplication1 {//Base class
class GFG {//data members
public string name;
public string subject;
//public method of base class
public void readers( string name, string subject)
{
this .name = name;
this .subject = subject;
Console.WriteLine( "Myself: " + name);
Console.WriteLine( "My Favorite Subject is: " + subject);
}
}//inheriting the GFG class using :
class lsbin : GFG {//constructor of derived class
public lsbin()
{
Console.WriteLine( "lsbin" );
}
}//Driver class
class Sudo {//Main Method
static void Main( string [] args)
{//creating object of derived class
lsbin g = new lsbin();
//calling the method of base class
//using the derived class object
g.readers( "Kirti" , "C#" );
}
}
}
输出如下:
lsbin
Myself: Kirti
My Favorite Subject is: C#
C#中的继承类型
以下是C#以不同组合支持的不同类型的继承。
单一继承:
在单一继承中, 子类继承一个超类的功能。在下图中, 类A用作派生类B的基类。
文章图片
多级继承:
在"多级继承"中, 派生类将继承基类, 并且派生类还充当其他类的基类。在下图中, 类A用作派生类B的基类, 而基类又充当派生类C的基类。
文章图片
层次继承:在层次继承中, 一个类充当多个子类的超类(基类)。在下图中, 类A用作派生类B, C和D的基类。
文章图片
多重继承(通过接口):
在多重继承中, 一个类可以具有多个父类, 并且可以从所有父类继承要素。请注意
C#不支持多重继承
与类。在C#中, 我们只能通过接口实现多重继承。在下图中, C类是从接口A和B派生的。
文章图片
混合继承(通过接口):
它是上述继承类型中的两种或多种的混合。由于C#不支持类的多重继承, 因此类也无法实现混合继承。在C#中, 我们只能通过接口实现混合继承。
文章图片
有关C#中的继承的重要事实
- 默认超类:除了没有超类的Object类之外, 每个类都只有一个并且只有一个直接超类(单继承)。在没有其他任何显式超类的情况下, 每个类都隐式为Object类的子类。
- 超类只能是以下一种:一个超类可以具有任意数量的子类。但是子类只能具有一超类。这是因为C#不支持类的多重继承。尽管具有接口, 但C#支持多重继承。
- 继承构造函数:子类从其超类继承所有成员(字段, 方法)。构造函数不是成员, 因此它们不会被子类继承, 但是可以从子类调用超类的构造函数。
- 私有成员继承:子类不继承其父类的私有成员。但是, 如果超类具有用于访问其私有字段的属性(get和set方法), 则子类可以继承。
推荐阅读
- Django ModelForm–从模型创建表单实现示例
- TCS NQT(2019-2020)面试经验
- Perl带引号,内插和转义的字符串使用介绍
- Grofers面试经验|S3(SDE校园内)
- JavaScript Math.round()函数用法示例
- Python求列表中最大,最小,第二大,第二最小值
- Perl数据类型介绍和用法示例
- Accolite面试经验分享(校园内)
- Android获取屏幕宽度高度