C#中的类和继承

类继承

通过继承我们可以定义一个新类,新类纳入一个已经声明的类并进行扩展。

可以使用一个已经存在的类作为新类的基础。已存在的类称为基类(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();
        }
    }

运行结果如下所示:

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值