gpt4 book ai didi

c# - 如何添加通用约束?

转载 作者:行者123 更新时间:2023-11-30 15:27:43 24 4
gpt4 key购买 nike

我在C#中有以下情况:

class MyGenericClass<T>
{
public void do()
{
}
}

class SpecificFooImpl : MyGenericClass<Foo>
{
public void otherStuff()
{
}
}

现在我想写一个只能返回MyGenericClass<T>的泛型方法或具体实现。我会写这样的东西:

var v1 = GetMyClass<MyGenericClass<Foo>>();
var v2 = GetMyClass<MyGenericClass<Bar>>();
var v3 = GetMyClass<SpecificFooImpl>();

我可以使用以下签名,但它对类型没有限制:

public T GetMyClass<T>();
//I don't want to write
//var v4 = GetMyClass<AnyOtherTypesWhichNotExtendMyGenericClass>();

有没有什么优雅的模式可以解决这个问题?

最佳答案

在定义后加一个where :子句,就可以定义应该遵守的内容了。
我说过它必须是一个类,但您可以添加一个基类或接口(interface)作为约束。

class MyGenericClass<T> where T : class, IYourCommonInterface
{
public void do()
{
}
}

引用文献:
请参阅有关约束的 MSDN:http://msdn.microsoft.com/en-us/library/d5x73970.aspx

关于c# - 如何添加通用约束?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26992646/

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