C# 继承
2018-01-22 17:06 更新
C# 继承
类可以从另一个类继承以扩展或定制原始类。
继承一个类会重用该类中的功能。
类只能从一个类继承。
例子
在这个例子中,我们首先定义一个名为Item的类:
public class Item {
public string Name;
}
public class Product : Item{ // inherits from Item
public long InStoreCount;
}
public class DiscountProduct : Item{ // inherits from Item
public decimal Price;
}
下面是我们如何使用这些类:
Product myProduct = new Product {Name="CSS",InStoreCount=1000};
Console.WriteLine (myProduct.Name); // CSS
Console.WriteLine (myProduct.InStoreCount); // 1000
以下代码使用DiscountProduct类。
DiscountProduct mansion = new DiscountProduct { Name="SQL", Price=250000 };
Console.WriteLine (mansion.Name); // SQL
Console.WriteLine (mansion.Price); // 250000
注意
派生类Product和DiscountProduct从基类Item继承Name属性。
派生类也称为子类。基类也称为超类。
多态性
引用是多态的。
这意味着类型x的变量可以引用子类化x的对象。
例如,考虑以下方法:
public static void Display (Item i) {
System.Console.WriteLine (i.Name);
}
此方法可以显示Product和DiscountProduct,因为它们都是Items:
Product myProduct = new Product ... ;
DiscountProduct mansion = new DiscountProduct ... ;
Display (myProduct);
Display (mansion);
多态性工作,因为子类具有其基类的所有功能。
is 运算符
The <code>is</code> operator tests whether an
object derives from a specified class or implements an interface.
It is often used to test before downcasting.
if (a is Product) {
Console.WriteLine (((Product)a).InStoreCount);
}
virtual 函数成员
标记为virtual的函数可以被希望提供特殊实现的子类覆盖。
方法,属性,索引器和事件都可以声明为virtual:
public class Item {
public string Name;
public virtual decimal FinalPrice { get { return 0; } }
}
子类通过应用覆盖修饰符覆盖虚拟方法:
public class Product : Item {
public long InStoreCount;
}
public class DiscountProduct : Item {
public decimal Price;
public override decimal FinalPrice {
get {
return Price;
}
}
}
默认情况下,项目的FinalPrice为0。
Product
不需要专门化此行为。
但是,DiscountProduct专门处理FinalPrice属性以返回价格的值:
DiscountProduct mansion = new DiscountProduct { Name="SQL", Price=250000 };
Item a = mansion;
Console.WriteLine (mansion.FinalPrice); // 250000
Console.WriteLine (a.FinalPrice); // 250000
虚拟和重写方法的签名,返回类型和可访问性必须相同。
重写的方法可以通过base关键字调用其基类实现。
以上内容是否对您有帮助:
← C# 常量
更多建议: