澳门新葡萄京官网首页new、virtual、override、abstract 等-重载

  • new、virtual、override、abstract 等-重载
  • new、virtual、override、abstract
    等-隐藏
  • new、virtual、override、abstract
    等-覆盖(改写、重写)
  • new、virtual、override、abstract
    等-抽象
  • new、virtual、override、abstract
    等-隐藏与覆盖实际操作
  • new、virtual、override、abstract
    等-重载
  • new、virtual、override、abstract 等-隐藏
  • new、virtual、override、abstract
    等-覆盖(改写、重写)
  • new、virtual、override、abstract
    等-抽象
  • new、virtual、override、abstract
    等-隐藏与覆盖实际操作
  • new、virtual、override、abstract
    等-重载
  • new、virtual、override、abstract
    等-隐藏
  • new、virtual、override、abstract 等-覆盖(改写、重写)
  • new、virtual、override、abstract
    等-抽象
  • new、virtual、override、abstract
    等-隐藏与覆盖实际操作



重载无关键字。

隐藏最主要的特点是关键字 new。

覆盖最主要的特点是关键字
virtual、override。

重载位于一个类同,方法名称相同,方法的参数要么类型不同,要么个数不同,或者类型个数均不同。

public class BaseClass
{
    public void Do()
    {
        HttpContext.Current.Response.Write(“基类方法”);
    }
}
 
public class DerivedClass : BaseClass
{
    public new void Do()
    {
        HttpContext.Current.Response.Write(“派生类方法”);
    }
}

public class BaseClass
{
    public virtual void Do()
    {
        HttpContext.Current.Response.Write(“基类方法”);
    }
}
 
public class DerivedClass : BaseClass
{
    public override void Do()
    {
        HttpContext.Current.Response.Write(“派生类方法”);
    }
}

一个重载类:

new 不能位于返回值类型(这里是 void)之后。

调用:

public class BaseClass
{
    public void Do()
    {
        HttpContext.Current.Response.Write(“基类方法”);
    }
    public void Do(string str)
    {
        HttpContext.Current.Response.Write(str);
    }
    public int Do(int id)
    {
        HttpContext.Current.Response.Write(id.ToString());
        return id;
    }
}

调用:

DerivedClass dc = new DerivedClass();
dc.Do(); // 派生类方法
((BaseClass)dc).Do(); // 派生类方法

调用时根据实参类型和个数,自动选择匹配的方法:

DerivedClass dc = new DerivedClass();
dc.Do(); // 派生类方法
((BaseClass)dc).Do(); // 基类方法

调用的都是派生类方法。

BaseClass bc = new BaseClass();
bc.Do();
bc.Do(“–“);
bc.Do(1);

dc 被转换成 BaseClass 后,其调用的就是基类的方法。

覆盖特点:

重载特点:

隐藏特点:

  • 必须位于基类和派生类中;
  • 方法名称必须相同;
  • 参数类型、参数个数必须相同;
  • 返回值类型必须相同(与隐藏不同);
  • 必须使用关键字 virtual 和 override;
  • 即使把派生类的实例转换成基类类型,也无法调用基类中被覆盖的方法,因为它已经被覆盖了嘛,不像隐藏还有被“发掘”的机会。
  • 必须位于同一个类中;
  • 方法名称必须相同;
  • 方法的参数要么类型不同,要么个数不同,要么类型个数均不同;
  • 返回值类型可以不同;

  • new、virtual、override、abstract 等-重载

  • new、virtual、override、abstract
    等-隐藏
  • new、virtual、override、abstract
    等-覆盖(改写、重写)
  • new、virtual、override、abstract
    等-抽象
  • new、virtual、override、abstract
    等-隐藏与覆盖实际操作
  • 必须位于基类和派生类中;
  • 方法名称必须相同;
  • 参数类型、参数个数必须相同;
  • 返回值类型可以不同;
  • 应该使用 new,虽然不使用 new 也会运行,但在编译时会被警告;
  • 调用派生类方法还是基类方法,取决于被什么类型的实例调用。

相关阅读


相关阅读

  • 覆盖和隐藏的访问修饰符
  • C#
    类属性可以用隐藏和覆盖吗?

  • new、virtual、override、abstract
    等-重载

  • new、virtual、override、abstract
    等-隐藏
  • new、virtual、override、abstract 等-覆盖(改写、重写)
  • new、virtual、override、abstract
    等-抽象
  • new、virtual、override、abstract
    等-隐藏与覆盖实际操作
  • 覆盖和隐藏的访问修饰符
  • C#
    类属性可以用隐藏和覆盖吗?

  • new、virtual、override、abstract
    等-重载

  • new、virtual、override、abstract 等-隐藏
  • new、virtual、override、abstract
    等-覆盖(改写、重写)
  • new、virtual、override、abstract
    等-抽象
  • new、virtual、override、abstract
    等-隐藏与覆盖实际操作


发表评论

电子邮件地址不会被公开。 必填项已用*标注