gpt4 book ai didi

c# - 这是对泛型的滥用吗?

转载 作者:太空狗 更新时间:2023-10-30 01:03:31 24 4
gpt4 key购买 nike

有时我发现自己处于一种情况,我想表达一种类型,它是内置类(例如 Wiforms 控件)的子类型,并且还实现了自定义接口(interface)。我有几个这样的类,它们彼此之间没有任何关系。我在这些情况下使用泛型。这是一个简化的示例:

interface IDescription
{
string GetDescription();
}

...

private string getDescription<T>(T control) where T : System.Windows.Forms.Control, IDescription
{
return control.Name + control.GetDescription();
}

然而,这似乎是泛型的一种非常规用法,因为泛型通常用于编写类型不可知的代码(如泛型容器)。另一方面,在这段代码中使用泛型仅仅是因为缺乏足够的类型表达。

我的问题是:这是对泛型的滥用吗?有没有更好的方法来编写这样的代码?

更新 1

正如 Frank Hileman 在此示例中指出的那样,将 Name 属性添加到接口(interface)将使这不是问题。让我再举一个例子:

private string getDescription<T>(T control) where T : System.Windows.Forms.Control, IDescription
{
return getData(control) + control.GetDescription();
}

private string getData(System.Windows.Forms.Control control)
{
...
}

更新 2

请注意,有时无法添加基类。例如:

可能有一个自定义类子类 TreeNode 和另一个子类 DataGridView

最佳答案

不,不是。泛型用于创建泛型容器等这一事实并不意味着那是泛型的唯一用例。

在这种情况下,由于您的方法对实现通用接口(interface)的不同类型执行相同的操作,因此完全没问题,不是滥用。

关于c# - 这是对泛型的滥用吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28203199/

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