c#中的重载 重写(覆盖) 隐藏

1. 重载 重写 

c#中也好,java中也好,都有重载 重写,我们还是先从概念看一下吧,

重载 : 就是在一个类中,可以编写几个同名的方法,但是它们的签名参数列表不完全同(参数个数或顺序不同)

private int GetTestA(int i){}

private int GetTestA(int j){} 

上面2个方法在同一个类中,不是重载,他们的名字和参数列表完全相同,这下明白,参数列表不完全相同的含义了吧

重写:子类覆盖父类中的方法,主要用于多态,比如,一个是Person 父类 一个是Student 子类, 父类中定义了一个方法,chat(), 定义如下,Person person = new Student();//上转型,若是Student中重写了此方法,前提是父类中用了virtual 修饰此方法,和java中国不一样,c#中默认是不允许重写的,接着说,则用person调用chat();则调用的是子类中定义的方法,要是没重写,则调用的是父类中的,这就是重写在多态中的意义


如果非要说说他们俩的区别和联系,表面是是针对一个类来说的,重载至少两个类,继承关系,实质上他们除了 一个字相同外,没啥其他的联系了

2.重写 隐藏

隐藏:指的是子类隐藏父类中的方法,还是用实例来说明重写和隐藏吧,
code如下:
    class Person
    {


        public virtual void MethondA()
        {


            Console.WriteLine("person methonda");


        }


        public void MethondB()
        {


            Console.WriteLine("person methondb");


        }
    }


    class Student : Person
    {


        public override void MethondA()
        {//重写了父类中的方法


            Console.WriteLine("student methonda");


        }


        public void MethondB()
        {//隐式的隐藏了父类中的方法,编译后,会为你自动加上new关键字


            Console.WriteLine("student methondb");


        }
    }   
   
class Test{


public static boid main(string[] args){
Person per = new Person();
per.MethondA();//父类方法
per.MethondB();//父类方法
Student student = new Student();
student.MethondA();//子类方法
student.MethondB();//子类方法,这是隐藏父类中方法的体现,要是不隐藏父类中的方法,则此处调用的是父类中的方法
Person person = new Student();//多态性的体现
person.MethondA();//子类,重写调用的是子类方法
person.MethondB();//父类,隐藏,不论显示还是隐式都死调用的是父类
Console.ReadLine();//多说两句,vitual 是不能是private,static合用的,这样上转型中,调用的static方法肯定是父类中的,
}
}   
PS:上面说的重写,隐藏说的都是方法,其实对于属性也是适用的  ,主要平日里用的方法最多,算是口误吧, 



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值