继承的使用
程序中使用面向对象的继承特性时,主要分为单继承和多继承两种情况,下面分别进行介绍。
1.单继承
单继承一般用于类之间的继承,C#中的类只支持单继承,实现单继承时,使用“子类:基类”格式。下面通过一个实例讲解如何实现单继承。
例 创建一个控制台应用程序,首先定义一个Language类,并在其中定义一个string类型的Name属性;然后自定义一个ProgramDic类,该类继承自Language类,该类中定义了两个方法,分别用来输出“C#编程词典”和“ASP.NET编程词典”两个字符串;最后在Program主程序类中实例化派生类ProgramDic的一个对象,并通过该对象调用父类中的Name属性为其赋值,然后通过判断该属性的值,调用派生类中的相应方法输出字符串。代码如下:
class Language //自定义类
{
private string name = ""; //定义语言变量
public string Name //定义语言属性
{
get
{
return name;
}
set
{
name = value;
}
}
}
class ProgramDic : Language //继承自定义的类
{
public void Csharp()//自定义方法,用来输出C#编程词典
{
Console.WriteLine("C#编程词典/n");
}
public void Donet() //自定义方法,用来输出ASP.NET编程词典
{
Console.WriteLine("ASP.NET编程词典/n");
}
}
class Program
{
static void Main(string[] args)
{
ProgramDic programdic = new ProgramDic(); //实例化派生类对象
while (true)
{
Console.Write("请输入语言(C#或ASP.NET):");
programdic.Name = Console.ReadLine();//为派生类中的 Name属性赋值
if (programdic.Name == "C#")
{
programdic.Csharp(); //调用Csharp方法
}
else if (programdic.Name == "ASP.NET")
{
programdic.Donet(); //调用Donet方法
}
}
}
}
2.多继承
如果要使用多继承,需要使用接口,因为C#中的类只支持单继承,而接口支持多继承,实现多继承时,继承的多个接口中间用逗号(,)隔开。
说明:
实现多继承时,继承的可以是多个接口,也可以是一个类及多个接口。
下面通过一个实例讲解如何实现多继承。
例 创建一个控制台应用程序,首先定义两个接口,分别表示人的实体接口和行为接口;然后声明一个类,并使这个类继承于定义的两个接口,在该类中实现接口中的成员属性和方法;最后在Main方法中实例化派生类的对象,并使用该派生类对象调用人的实体接口和行为接口中的属性和方法。代码如下:
interface IPeopleEntity //定义一个实体接口
{
string Name //定义名字属性
{
get;
set;
}
}
interface IPeopleActive //定义一个行为接口
{
void say(string str); //定义说话方法
}
class PeopleClass:IPeopleEntity,IPeopleActive //继承定义的两个接口
{
string name = ""; //定义名字变量
public string Name//实现接口中定义的名字属性
{
get
{
return name;
}
set
{
name = value;
}
}
bool CheckChinese(string str) //定义一个方法,用来判断字符串是不是中文
{
bool flag = false; //定义一个bool类型变量,作为标识
UnicodeEncoding encode = new UnicodeEncoding(); //实例化编码对象
byte[] b = encode.GetBytes(str); //将字符串转换为字节数组
for (int i = 0; i < b.Length; i++) //遍历字节数组
{
if (b[i] != 0) //判断字节数组中指定索引处的值是不是0
{
flag = true; //设置标识为true
}
else
{
flag = false;//设置标识为false
}
}
return flag; //返回定义的标识
}
public void say(string str) //实现接口中定义的说话方法
{
if (CheckChinese(str)) //判断输入的是不是中文
{
Console.WriteLine(str+"是中国人,请说汉语!");
}
else
{
Console.WriteLine(str + " is a american,please speak english!");
}
}
}
class Program
{
static void Main(string[] args)
{
PeopleClass peopleclass = new PeopleClass(); //实例化类对象
while (true)
{
Console.Write("请输入名字:");
peopleclass.Name = Console.ReadLine();//记录用户输入的名字
peopleclass.say(peopleclass.Name); //根据用户输入显示相应的字符串
}
}
}