正在阅读:C# 最强大的功能--泛型简介C# 最强大的功能--泛型简介

2005-06-23 10:16 出处: 作者:Juval Lowy 责任编辑:moningfeng

或构造函数约束:

public class BaseClass where T : new()
{
public T SomeMethod()
{
return new T();
}
}
public class SubClass : BaseClass where T : new()
{...}



基类可以定义其签名使用一般类型参数的虚拟方法。在重写它们时,子类必须在方法签名中提供相应的类型:

public class BaseClass
{
public virtual T SomeMethod()
{...}
}
public class SubClass: BaseClass
{
public override int SomeMethod()
{...}
}



如果该子类是一般类型,则它还可以在重写时使用它自己的一般类型参数:

public class SubClass: BaseClass
{
public override T SomeMethod()
{...}
}



您可以定义一般接口、一般抽象类,甚至一般抽象方法。这些类型的行为像其他任何一般基类型一样:

public interface ISomeInterface
{
T SomeMethod(T t);
}
public abstract class BaseClass
{
public abstract T SomeMethod(T t);
}

public class SubClass : BaseClass
{
public override T SomeMethod(T t)
{...)
}



一般抽象方法和一般接口有一种有趣的用法。在 C# 2.0 中,不能对一般类型参数使用诸如 + 或 += 之类的运算符。例如,以下代码无法编译,因为 C# 2.0 不具有运算符约束:

public class Calculator
{
public T Add(T arg1,T arg2)
{
return arg1 + arg2;//Does not compile
}
//Rest of the methods
}



但是,您可以通过定义一般操作,使用抽象方法(最好使用接口)进行补偿。由于抽象方法的内部不能具有任何代码,因此可以在基类级别指定一般操作,并且在子类级别提供具体的类型和实现:

public abstract class BaseCalculator
{
public abstract T Add(T arg1,T arg2);
public abstract T Subtract(T arg1,T arg2);
public abstract T Divide(T arg1,T arg2);
public abstract T Multiply(T arg1,T arg2);
}
public class MyCalculator : BaseCalculator
{
public override int Add(int arg1, int arg2)
{
return arg1 + arg2;
}
//Rest of the methods
}


键盘也能翻页,试试“← →”键

关注我们

最新资讯离线随时看 聊天吐槽赢奖品