基类的访问

基类的访问离不开base的使用
base的使用条件:
当子类重写父类的方法后,子类对象将无法直接访问父类被重写的方法。base关键字专门用于在子类中访问父类的成员。(因为子类虚方法与父类的覆写方法方法相同,C#编辑器在重写后只能访问到派生类的方法,而无法访问早原理基类的方法)
base的使用:
用法1:在屏蔽基类成员的情况下,继续调用基类的成员(这一种情况之下,多次使用base来调用屏蔽的函数,不利于整体的代码,建议重新审视之前的设计)

 class Program
    {
        static void Main(string[] args)
        {
            OtherClass oc = new OtherClass();
            oc.Method(oc.Field);
            
        }
    }
    class SomeClass //基类
    {
        public string Field = "SomeClass Field";
        public void Method(string value)
        {
            Console.WriteLine("SomeClass.Method:{0}",value);
        }
    }
    class OtherClass : SomeClass
    {
        new public string Field = "OtherClass Field";//屏蔽基类的Field字段
        new public void Method(string value)//屏蔽基类的方法
        {
            Console.WriteLine("OtherClass.Method:{0}",value);
            Console.WriteLine(Field);
            Console.WriteLine(base.Field);//base的使用
        }
    }

用法二:与构造器相结合,子类的构造器在编写的时候直接调用基类的构造器,可以有效降低代码的复杂度,提高代码的可读性和美观性。
同时base可以能将基类的方法掉用出来,使派生来在扩展继承的方法时,更加高效和方便

 class Program
    {
        //base的用法,与构造器相结合
        static void Main(string[] args)
        {
            Consumable c = new Consumable(1, "张三",100);
            Console.WriteLine(c.speak());
            Console.ReadLine();
        }
    }
    class Item
    {
        int id;
        string name;
        public Item(int id, string name)
        {
            this.id = id;
            this.name = name;
        }
        public string speak()
        {
            return string.Format("id:{0} name:{1}", id, name);
        }
            
    }
    class Consumable : Item
    {
        int hp;
        public Consumable(int id, string name, int hp) : base(id, name)
        {
            this.hp = hp;
        }

        public string speak()
        {
            return base.speak() + string.Format("hp:{0}",hp);
        }
    }

在类的继承中,虽然派生类不能删除它继承的任何成员,但可以用与基类成员名称相同的成员来屏蔽基类成员。
屏蔽的做法:
1、要屏蔽一个继承的数据成员,需要声明一个新的相同的类型的成员,并使用相同的名称。
2、通过在派生类中声明新的带有先沟通签名的函数成员,可以屏蔽继承的函数成员。
3、要让编译器知道你在故意屏蔽继承的成员,可以使用new修饰符。
4、也可以屏蔽静态成员

 class Program
    {
        static void Main(string[] args)
        {
            OtherClass oc = new OtherClass();
            oc.Method(oc.Field);
        }
    }
    class SomeClass //基类
    {
        public string Field = "SomeClass Field";
        public void Method(string value)
        {
            Console.WriteLine("SomeClass.Method:{0}",value);
        }
    }
    class OtherClass : SomeClass
    {
        new public string Field = "OtherClass Field";//屏蔽基类的Field字段
        new public void Method(string value)//屏蔽基类的方法
        {
            Console.WriteLine("OtherClass.Method:{0}",value);
        }
    }
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值