Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/294.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
像这样的语法在C#中是什么意思?_C#_Syntax - Fatal编程技术网

像这样的语法在C#中是什么意思?

像这样的语法在C#中是什么意思?,c#,syntax,C#,Syntax,像这样的语法在C#中是什么意思 公共抽象类HostFactory:ServiceHostFactory 塔普:伊福 HostFactory是一个公共泛型类(源自ServiceHostFactory),具有一个名为TApp的泛型类型参数,其中提供的任何TApp都必须实现IFoo接口(注意:IWhatever模式仅仅是一个约定;IFoo可能是一个类,我想)。类型HostFactory不是一个具体的类型;它必须进一步子类化才能实例化——可能是通过以下方式实现的(尽管泛型子类也足够): 公共类BarHo

像这样的语法在C#中是什么意思

公共抽象类HostFactory:ServiceHostFactory
塔普:伊福

HostFactory
是一个公共泛型类(源自
ServiceHostFactory
),具有一个名为
TApp
的泛型类型参数,其中提供的任何
TApp
都必须实现
IFoo
接口(注意:
IWhatever
模式仅仅是一个约定;
IFoo
可能是一个类,我想)。类型
HostFactory
不是一个具体的类型;它必须进一步子类化才能实例化——可能是通过以下方式实现的(尽管泛型子类也足够):

公共类BarHostFactory:HostFactory{}
公共类栏:IFoo{…}

这是一个抽象泛型类,从ServiceHostFactory继承,并对泛型类型进行约束


它说
HostFactory
有一个泛型
TApp
,它继承自
ServiceHostFactory
,其中
关键字表示
TApp
是一个constrant

在C#2.0中,使用where REFERED关键字定义约束。在泛型类型参数上使用where关键字,后跟派生冒号,以向编译器指示泛型类型参数实现特定接口


这里有很多内容,我想知道这是否是因为“IFoo”而做的家庭作业,或者你做了替换以简化示例

-
:ServiceHostFactory
,HostFactory继承自ServiceHostFactory

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

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

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

-
public
HostFactory是公共的,这意味着它对声明它的程序集之外的代码可见

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

当你写一些可以处理多种类型的东西时,你会使用泛型。例如,在2.0中使用泛型之前,我们必须先将所有内容转换为一个对象,然后才能将其放入集合中,这是非常危险的,因为当你以后使用从集合中删除项。使用泛型,我们可以执行
ArrayList
来创建布尔的ArrayList,现在不需要强制转换。编译器可以验证我们是否将布尔放入集合中


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

您不了解哪一部分?查找“.NET泛型”和“泛型参数约束”(旁注:
其中
在泛型约束中除了“实现特定接口”之外还有其他含义)-至少还有4种其他用途(
:struct
:class
:new()
:SomeBaseType
)@嗯,我相信你的话。在我回答之前,我看了你过去问过的其他问题,看起来你不是那种类型的人:)实际上泛型让我很困惑,你什么时候会使用它们等等,我也不熟悉这种语法(虽然我对实现的猜测是正确的,但我想听到更多关于如何以及何时使用它的信息)。这里的算法是什么意思?它是抽象HostFactory类的方法实现吗?一种算法,例如函数。也许有一个分类器类,其中T:IComparible,并且它有一个BinarySort(ArrayList)函数。BinarySort是一种通用算法,因为它知道T实现了IComparable,所以它可以比较ArrayList中的项并重新排列它们以对它们进行排序。因此,与其编写重复的代码来对int、string等进行排序,不如只编写一次算法。它们是“通用的”因为它们适用于许多场景。您应该从这里开始阅读:
public abstract class HostFactory<TApp> : ServiceHostFactory
        where TApp : IFoo
public class BarHostFactory : HostFactory<Bar> {}
public class Bar : IFoo {...}