这样的语法在C#中意味着什么?

Nev*_*hai 6 c# syntax

这样的语法在C#中意味着什么?

public abstract class HostFactory<TApp> : ServiceHostFactory
        where TApp : IFoo
Run Code Online (Sandbox Code Playgroud)

Mar*_*ell 17

HostFactory是一个公共泛型类(派生自来自ServiceHostFactory),其中一个泛型类型参数被调用TApp,其中任何提供的TApp必须实现IFoo接口(警告:IWhatever模式只是一个约定; 我想IFoo 可能是一个类).类型HostFactory<TApp>不是具体类型; 它必须进一步子类化才能被实例化 - 大概是通过下面的东西(尽管通用子类也足够):

public class BarHostFactory : HostFactory<Bar> {}
public class Bar : IFoo {...}
Run Code Online (Sandbox Code Playgroud)


Aar*_*nLS 2

这里发生了很多事情,我想知道这是否是因为“IFoo”而成为家庭作业,或者也许您进行了替换以简化示例。

- : ServiceHostFactory、HostFactory继承自ServiceHostFactory。

- HostFactory<TApp>,HostFactory 是一个泛型类型,因为它具有 TApp 类型参数。每当有人使用 HostFactory 类时,他们都可以为 TApp 指定一个类型,这将导致在代码中出现 TApp 的任何地方都使用该类型。因此,如果该类有一个函数TApp GetApp()并且它们指定<int>为 TApp,那么 GetApp 实际上是int GetApp()

- where TApp : IFoo,TApp必须实现IFoo接口(这也可以是一个类,表明它必须从该类继承,而不一定是直接继承)。

- abstract,HostFactory是一个抽象类,这意味着其他类可以继承它,但没有代码可以实例化HostFactory本身。这就像我给你一个汽车的框架,然后说,法律不允许你在路上驾驶它,但欢迎你用它制造一辆你自己的汽车。

- publicHostFactory 是公共的,这意味着它对于声明它的程序集外部的代码是可见的。

编辑:关于泛型的更多信息,我将从MSDN 中的一句非常重要的话开始:“泛型是 C# 2.0 最强大的功能。”

当您编写可以与多种类型一起使用的东西时,您将使用泛型。例如,在 2.0 中使用泛型之前,我们必须先将所有内容转换为对象,然后才能将其放入集合中,这非常危险,因为无论何时您以后获得任何类型,comppiler 都无法验证您是否正在转换为正确的类型集合中的一个项目。使用泛型,我们可以ArrayList<bool>创建一个 bool 的 ArrayList,现在不需要进行强制转换。编译器可以验证我们是否将 bool 放入集合中。

例如,在上面的类中,我们可以编写与实现 IFoo 的事物一起工作的算法,只知道该对象将能够执行 IFoo 接口所具有的操作。因此我可以编写一个调用 IFoo 接口上的方法的算法,然后任何实现 IFoo 接口的人将来都可以重用我的算法。