override与重载(overload)的区别

Override是指父类和子类之间方法的继承关系,这些方法有着相同的名称和参数类型。 
        Overload是指同一个类中不同方法(可以在子类也可以在父类中定义)间的关系,这些方法有着相同的名称和不同的参数类型。

        也就是说,如果在子类声明相同的方法名称的时候,如果不是用inherited来继承的话,就会将父类的方法覆盖掉;而且父类的方法声明必须标识为virtual和dynamic;overload比较好理解,就是同类里有许多相同的方法名称,但是参数不相同。且第一个方法可以不用overload来标识。

        override的方法返回值类型必须一致,其modifier可以扩大,不可以缩小。

        一个不是用abstract标识的方法不可以override成abstract方法。

       override的子类的方法拋出的异常只能是父类方法拋出异常的子异常。

Override是指父类和子类之间方法的继承关系,这些方法有着相同的名称和参数类型。 
        Overload是指同一个类中不同方法(可以在子类也可以在父类中定义)间的关系,这些方法有着相同的名称和不同的参数类型。

        也就是说,如果在子类声明相同的方法名称的时候,如果不是用inherited来继承的话,就会将父类的方法覆盖掉;而且父类的方法声明必须标识为virtual和dynamic;overload比较好理解,就是同类里有许多相同的方法名称,但是参数不相同。且第一个方法可以不用overload来标识。

        override的方法返回值类型必须一致,其modifier可以扩大,不可以缩小。

        一个不是用abstract标识的方法不可以override成abstract方法。

       override的子类的方法拋出的异常只能是父类方法拋出异常的子异常。

 

 

 

查了很多资料,还是不懂。
1.C#中的事件和委托的作用?
2.他们之间的关系?
3.和什么情况使用委托和事件?

public partial class TestDemo : System.Web.UI.Page {
        private delegate void WriteHander();//委托
        public event WriteHander writeEven;//事件
        protected void Page_Load(object sender, EventArgs e) {
            WriteHander wHander = new WriteHander(MyWrite);
            wHander += HeWrite;
            wHander();//用委托调用方法

            writeEven += HeWrite;
            writeEven += MyWrite;
            writeEven();//用事件调用方法
        }
        public void MyWrite() {
            Response.Write("MyWrite");
        }
        public void HeWrite() {
            Response.Write("HeWrite");
        }
    }
如上面的代码:
   用委托和用事件都能实现调用MyWrite和HeWrite两个方法。
   4.但是用事件的方式来调用的话有什么好处?
   5.添加了委托一定要再定义事件来调用么?
   6/什么情况下只要使用委托就可以,什么情况下必须配合事件使用?

 

 

1.C#中的事件和委托的作用?
事件代表一个组件能够被关注的一种信号,比如你的大肠会向你发出想拉屎的信号,你就可以接收到上厕所。
委托是可以把一个过程封装成变量进行传递并且执行的对象,比如你上蹲坑和上坐马桶拉屎的方式是不一样的,但是你的大脑不需要知道两种方式的不同,只需要在蹲坑的时候获取身体用于蹲位姿势的委托进行调用拉屎,在坐马桶的时候获取坐姿的委托进行调用拉屎。

2.他们之间的关系?
委托是一种类型,事件是一种成员,就相当于public int Age {get;set;}这个属性中,int就是类型,Age是一个成员,public event EventHandler Push;这个事件中EventHandler就是委托类型,Push是事件他是一个成员。

3.和什么情况使用委托和事件?
事件是组件中的抽象概念,同样包括状态和操作也是组件中的概念,对应到C#里面就是属性和方法。所以像控件之类的组件都会有事件。而委托代表一个代码的执行过程,C#3.0引入linq以后,用的就非常频繁了。

4.但是用事件的方式来调用的话有什么好处?
事件是一种封装,就好像属性会封装字段一样,可以把定义和实现隔离开来,给你举个例子就是DateTime实际上你看那么多属性,其实里面只有一个字段存储时间,各种日期啊年啊属性都是根据这个时间算出来的。事件也把内部类型为一个委托的字段封装起来,这样在类的外部就只能使用事件来注册或者注销事件关注,而不能引发事件。就好像你拉不拉屎不由其他人控制一样。

   5.添加了委托一定要再定义事件来调用么?
看情况,你可以不用属性封装字段,但是在代码设计上来说,或者面向组件设计上来说,封装是一种设计原则,你学过设计模式,或者参与过大型系统的设计就会很容易理解这点。

   6/什么情况下只要使用委托就可以,什么情况下必须配合事件使用?
一般情况下建立组件模型都使用事件

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值