C#继承类重写与隐藏基类方法的区别
2007-03-24 16:54
597 查看
using System;
using System.Collections;
public class Nevermore60Customer:Customer
{
public override string GetFunnyString()
{
return "Nevermore60.Nevenmore!";
}
--------------------------------------------------------------------------------
public class Customer
{
public virtual string GetFunnyString()
{
return "Plain ordinary customer.Kaark!";
}
public class SamplesArray
{
public static void Main()
{
Customer Cust1=new Nevermore60Customer();
Nevermore60Customer Cust2;
// Cust1=new Customer();
Console.WriteLine("Customer referencing Customer."+Cust1.GetFunnyString());
Cust1=new Nevermore60Customer();
Console.WriteLine("Customer referencing Nevenmore60Customer:"+Cust1.GetFunnyString());
Cust2=new Nevermore60Customer();
Console.WriteLine("Nevenmore60Customer referencing"+Cust2.GetFunnyString());
}
}
Customer Cust1=new Nevermore60Customer();
如果是重写:则,如果声明的基类对象,指向的是派生类,那么这时调用的是派生类中对基本重写的方法的方法(如上所示)
如果是隐藏基类方法: public New string GetFunnyString()
{
return "Nevermore60.Nevenmore!";
}
则:Customer Cust1=new Nevermore60Customer();此时Cust1调用的仍是声明时候的基类中的GetFunnyString方法.
但二者声明与赋值都是同一个类时,不会发生这种问题.
using System.Collections;
public class Nevermore60Customer:Customer
{
public override string GetFunnyString()
{
return "Nevermore60.Nevenmore!";
}
--------------------------------------------------------------------------------
public class Customer
{
public virtual string GetFunnyString()
{
return "Plain ordinary customer.Kaark!";
}
public class SamplesArray
{
public static void Main()
{
Customer Cust1=new Nevermore60Customer();
Nevermore60Customer Cust2;
// Cust1=new Customer();
Console.WriteLine("Customer referencing Customer."+Cust1.GetFunnyString());
Cust1=new Nevermore60Customer();
Console.WriteLine("Customer referencing Nevenmore60Customer:"+Cust1.GetFunnyString());
Cust2=new Nevermore60Customer();
Console.WriteLine("Nevenmore60Customer referencing"+Cust2.GetFunnyString());
}
}
Customer Cust1=new Nevermore60Customer();
如果是重写:则,如果声明的基类对象,指向的是派生类,那么这时调用的是派生类中对基本重写的方法的方法(如上所示)
如果是隐藏基类方法: public New string GetFunnyString()
{
return "Nevermore60.Nevenmore!";
}
则:Customer Cust1=new Nevermore60Customer();此时Cust1调用的仍是声明时候的基类中的GetFunnyString方法.
但二者声明与赋值都是同一个类时,不会发生这种问题.
相关文章推荐
- [导入]C#继承类重写与隐藏基类方法的区别
- C#继承类重写与隐藏基类方法的区别
- 关于C#中,继承类重写与隐藏基类方法的区别!
- C#继承类重写与隐藏基类方法的区别
- c#隐藏基类方法和重写基类方法的区别
- c#隐藏基类方法和重写基类方法的区别
- c#隐藏和重写基类方法的区别
- c#隐藏和重写基类方法的区别
- C# 基类 派生类 方法隐藏 方法重写
- 重写基类方法与隐藏基类方法的区别
- C#中隐藏(new)、方法重写(override)、重载(overload)的区别
- C#下 子类继承父类的虚方法后 使用override重写父类方法 和 不使用override重写有什么区别?
- C#继承---基类虚方法virtual,派生类隐藏方法new
- 【经典】C#中隐藏(new)、方法重写(override)、重载(overload)的区别
- C#中隐藏(new)和方法重写(override)和重载(overload)的区别
- 2018/01/07JAVA 基础 / 接口与继承:重写【子类继承并覆盖父类的对象方法】、隐藏【子类继承并覆盖父类的类方法】与实现类实现接口方法の区别
- (原创)c#学习笔记10--定义类成员02--类成员的其他议题02--调用重写或隐藏的基类方法
- C#继承之隐藏基类方法
- c#中隐藏(new)和方法重写(override)和重写(overload)的区别
- 关于在C#中对类中的隐藏基类方法和重写方法的理解