gpt4 book ai didi

c# - 在 .NET 中对类型参数进行约束有什么意义(基类和接口(interface)约束)

转载 作者:太空狗 更新时间:2023-10-29 21:09:56 24 4
gpt4 key购买 nike

我在工作中正在研究一个小型类库,它自然涉及使用泛型来完成这项任务。但是有一点我不太理解泛型:为什么我需要使用泛型类型参数,然后将类型参数约束到特定的基类或接口(interface)。

这是我的意思的一个例子:

public class MyGenericClass<T> where T : SomeBaseClass
{
private T data;
}

这是没有泛型的实现

public class MyClass
{
private SomeBaseClass data;
}

这两个定义是否相同(如果是,那么我看不到在这里使用泛型的优势)?

如果不是,我们在这里使用泛型有什么好处?

最佳答案

与几乎所有泛型的使用一样,消费者也能从中受益。约束类型为您提供了与强类型参数相同的优势(或者您可以做其他事情,例如确保有一个公共(public)无参数构造函数或确保它是值或引用类型),同时仍然保留泛型的优点你的类或函数的消费者。

例如,使用泛型还可以让您获得指定的实际类型,如果它具有任何特定值的话。

这个例子有点做作,但看看这个:

public class BaseClass
{
public void FunctionYouNeed();
}

public class Derived : BaseClass
{
public void OtherFunction();
}

public class MyGenericClass<T> where T: BaseClass
{
public MyGenericClass(T wrappedValue)
{
WrappedValue = wrappedValue;
}

public T WrappedValue { get; set; }

public void Foo()
{
WrappedValue.FunctionYouNeed();
}
}

...

var MyGenericClass bar = new MyGenericClass<Derived>(new Derived());

bar.Foo();

bar.WrappedValue.OtherFunction();

关于c# - 在 .NET 中对类型参数进行约束有什么意义(基类和接口(interface)约束),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10384413/

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