《C#编程之道》 之 C#面向对象编程的继承性(三)

来源:互联网 发布:淘宝试衣镜 编辑:程序博客网 时间:2024/04/30 23:50

继承的使用

程序中使用面向对象的继承特性时,主要分为单继承和多继承两种情况,下面分别进行介绍。

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 americanplease 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); //根据用户输入显示相应的字符串

        }

    }

}

原创粉丝点击