C# where 关键字[重复]

问题描述 投票:0回答:6

在以下代码段(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
关键字有什么作用?

c#
6个回答
15
投票

这是对泛型的限制

MSDN

因此 new() 约束表示它必须有一个公共无参数构造函数


9
投票

它指定 对泛型类型参数的约束

T

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

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


5
投票

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

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

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


3
投票

这是一个通用类型约束。这意味着泛型类型

T
必须实现零参数构造函数。


3
投票

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

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

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


1
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.