C#where关键字

时间:2010-05-05 14:23:51

标签: c#

在下面的一段代码中(C#2.0):

public abstract class ObjectMapperBase< T > where T : new()
{
    internal abstract bool UpdateObject( T plainObjectOrginal,
                                         T plainObjectNew,
                                         WebMethod fwm,
                                         IDbTransaction transaction );
}

继承人示例:

public abstract class OracleObjectMapperBase< T > : ObjectMapperBase< T > where T : new()
{
    internal override bool UpdateObject( T plainObjectOrginal,
                                         T plainObjectNew,
                                         WebMethod fwm,
                                         IDbTransaction transaction )
    {
        // Fancy Reflection code.
    }
}

where关键字有什么作用?

6 个答案:

答案 0 :(得分:15)

这是对泛型的约束

MSDN

所以new()约束说它必须有一个公共无参数构造函数

答案 1 :(得分:8)

它指定a constraint on the generic type parameter T

new()约束指定T必须具有公共默认构造函数。

您还可以规定类型必须是类(或相反,结构),它必须实现给定的接口,或者它必须从特定的类派生。

答案 2 :(得分:5)

where子句用于指定可用作泛型声明中定义的类型参数的参数的类型的约束。例如,您可以声明泛型类MyGenericClass,以便类型参数T实现IComparable接口:

public class MyGenericClass<T> where T:IComparable { }

在这种特殊情况下,它表示T必须实现默认构造函数。

答案 3 :(得分:3)

这是generic type constraint。这意味着泛型类型T必须实现零参数构造函数。

答案 4 :(得分:3)

Where关键字基本上是对类可以使用的对象的约束。

取自MSDN“new()Constraint让编译器知道提供的任何类型参数必须具有可访问的无参数构造函数”

http://msdn.microsoft.com/en-us/library/6b0scde8(VS.80).aspx

答案 5 :(得分:1)

这意味着T必须有一个公共默认构造函数。