gpt4 book ai didi

c# - 定义泛型时 new() 的目的是什么?

转载 作者:太空狗 更新时间:2023-10-30 00:16:11 25 4
gpt4 key购买 nike

我正在尝试理解泛型。这是一个示例:

   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");

Further reading .

这个的主要用途是允许通用代码构造 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com