我正在尝试理解泛型。这是一个示例:
public static bool CreateTableIfNotExist<T>(this CloudTableClient tableStorage, string entityName)
where T : TableServiceEntity, new()
{
bool result = tableStorage.CreateTableIfNotExist(entityName);
return result;
}
我有几个问题。首先,定义中 new() 的目的是什么。我的另一个问题是,我该如何使用这个泛型。这里有一个例子:
_tableStorage.CreateTableIfNotExist<MembershipRow>(_tableName);
但是我不明白。这个泛型的真正目的是什么?如果没有泛型,我不能做同样的事情吗?
_tableStorage.CreateTableIfNotExist("MyNewTable");
最佳答案
它是一个泛型类型约束,声明该类型必须具有公共(public)无参数构造函数。
myCloudTableClient.CreateTableIfNotExist<TypeWithPublicParameterlessConstructor>("Customers");
这个的主要用途是允许通用代码构造 T
的实例,而不是 default(T)
-你可能经常看到的东西。不幸的是,当涉及到对构造函数的约束时,除了公共(public)无参数构造函数之外,没有任何约束支持。
更新:查看您更新的代码,从未使用过泛型,因此在这种情况下它没有任何用处。泛型在扩展方法上的一个常见策略是支持泛型扩展方法。
public static bool Equals<T>(this T self, T other) where T : IEquatable<T>
{
return self.Equals(other);
}
更新 2:在您未指定类型约束的示例中,这仅在类型约束 could be inferred 时有效由编译器根据使用情况...我不确定你的情况会发生什么,但我猜它不会编译。
关于c# - 定义泛型时 new() 的目的是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8517693/