当前位置:  开发笔记 > 编程语言 > 正文

C#泛型可以有特定的基类型吗?

如何解决《C#泛型可以有特定的基类型吗?》经验,为你挑选了3个好方法。

通用接口的类型是否可能基于特定的父类?

例如:

public interface IGenericFace
{
}

显然上面的代码不起作用,但如果确实如此,我试图告诉编译器的是T必须是一个子类BaseClass.可以这样做,有计划吗,等等?

我认为它在特定项目方面很有用,确保通用接口/类在编译时不与非预期类型一起使用.或者也可以自我文档:显示预期的类型.



1> Ryan Lundy..:
public interface IGenericFace where T : SomeBaseClass


您可以在http://msdn.microsoft.com/en-us/library/d5x73970(VS.80).aspx找到有关如何约束类型的更多信息.

2> Micah..:

你所指的是"通用约束".可以在泛型类型上存在许多约束.

一些基本的例子如下:

where T: struct - type参数必须是值类型.除了Nullable- 之外的任何值类型都可以指定.有关更多信息,请参阅使用可空类型(C#编程指南).

where T : class - type参数必须是引用类型; 这也适用于任何类,接口,委托或数组类型.

where T : new() - 类型参数必须具有公共无参数构造函数.与其他约束一起使用时,new()必须最后指定约束.

where T : - type参数必须是或从指定的基类派生.

where T : - type参数必须是或实现指定的接口.可以指定多个接口约束.约束接口也可以是通用的.

where T : U- 提供的类型参数T必须是或从提供的参数派生U.这称为裸型约束.

这些也可以像这样链接在一起:

C#

public class TestClass where T : MyBaseClass, INotifyPropertyChanged, new() { }
public interface IGenericFace where T : SomeBaseClass

VB

Public Class TestClass(Of T As {MyBaseClass, INotifyPropertyChanged, New})
Public Interface IGenericInterface(Of T As SomeBaseClass)



3> 小智..:

是.

public interface IGenericFace
    where T : BaseClass
{
}


这应该删除,我不知道它是如何添加任何东西 - Kyralessa已经回答了这个问题.
推荐阅读
保佑欣疼你的芯疼
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有