加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-15 04:26:29 所属栏目:百科 来源:网络整理
导读:我正在研究工作中的小型类库,它自然会涉及使用泛型来完成这项任务.但是有些东西我对仿制药并不是很了解: 为什么我需要使用泛型类型参数,然后将type参数约束到特定的基类或接口. 这是我的意思的一个例子: public class MyGenericClassT where T : SomeBaseC
我正在研究工作中的小型类库,它自然会涉及使用泛型来完成这项任务.但是有些东西我对仿制药并不是很了解:
为什么我需要使用泛型类型参数,然后将type参数约束到特定的基类或接口.

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

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

这是没有泛型的实现

public class MyClass
{
    private SomeBaseClass data;
}

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

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

解决方法

与仿制药的几乎所有用途一样,消费者也会受益.约束类型可以获得与强类型参数相同的优势(或者您可以执行其他操作,例如确保存在无参数构造函数或确保它是值或引用类型),同时仍保留泛型的细节您的班级或职能的消费者.

例如,使用泛型也允许您获取指定的实际类型(如果具有任何特定值).

这个例子有点人为,但看看这个:

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读