继承反映了类与类关系
为了声明一个类从另一个类继承,需要使用以下语法:
class DerivedClass : BaseClass
{
}
DerivedClass (派生类)将从BaseClass(基类)继承,基类中的方法会成为派生类的一部分。在C#中,一个类最多允许从一个其他的派生类;不允许从两个或者更多的派生类。然而,除非DerivedClass 声明为sealed(也就是声明为“密封类”),否则可以使用相同的语法,从DerivedClass 派生出更深一级的派生类。
继承只适用于类,不适用于结构。不能定义由结构组成的继承链,也不能从类或其他结构派生出一个结构。
调用基类构造器
除了继承得到的方法,派生类还自动包含来自基类的所有字段。
为派生类定义构造器时,可以使用base关键字调用基类构造器。
class Mammal //基类
{
public Mammal()//基类构造器
{
.....
}
}
class Horse : Mammal//Horse是派生类
{
public Horse (string name )
:base(name) //调用Mammal(name)
{
........
}
.....
}
完全可以将一种类型的对象赋给继承层次结构中较高位置的一个类的变量。
声明虚方法
故意设计成被重写的方法称为虚方法。
我们使用virtual关键字来标记虚方法。
namespace System
{
class Object
{
public virtual string ToString()
{
}
}
}
声明重写方法
派生类用override关键字重写基类的虚方法,从而提供该方法的另一个实现。
理解扩展方法
扩展方法允许添加静态方法来扩展现有的类型(无论是类还是结构)。引用被扩展类型的数据即可调用扩展方法。
扩展方法在静态类中定义,被扩展的类型必须是方法的第一个参数,而且必须附加this关键字。
using System;
namespace Extensions
{
static class Util
{
public static int ConvertToBase(this int i, int baseToConvertTo)
{
if (baseToConvertTo < 2 || baseToConvertTo > 10)
{
throw new ArgumentException("Value cannot be converted to base " + baseToConvertTo.ToString());
}
int result = 0;
int iterations = 0;
do
{
int nextDigit = i % baseToConvertTo;
i /= baseToConvertTo;
result += nextDigit * (int)Math.Pow(10, iterations);
iterations++;
}
while (i != 0);
return result;
}
}
}
调用
int x = 591;
for (int i = 2; i <= 10; i++)
{
Console.WriteLine("{0} in base {1} is {2}",x, i, x.ConvertToBase(i));
}