什么';s的目的是使类名介于;少于;及;大于;C#中的符号?

什么';s的目的是使类名介于;少于;及;大于;C#中的符号?,c#,class,generics,declaration,C#,Class,Generics,Declaration,我不理解下面的类声明: public abstract class Class1 <TDomainServiceContract, TDomainService> { ... } 公共抽象类Class1 { ... } 我知道什么是TDomainServiceContract和TDomainService,但是为什么在和符号之间使用它们呢?这些都是 它们意味着该类是一个泛型类,在您的示例中,对类型有约束-两者都需要是DomainContext或从中派生的类 有关详细信息,请

我不理解下面的类声明:

public abstract class Class1 <TDomainServiceContract, TDomainService>
{
   ...
}
公共抽象类Class1
{
...
}
我知道什么是
TDomainServiceContract
TDomainService
,但是为什么在
符号之间使用它们呢?

这些都是

它们意味着该类是一个泛型类,在您的示例中,对类型有约束-两者都需要是
DomainContext
或从中派生的类


有关详细信息,请参见MSDN上的。

这表示在使用该类时,可以为实现
DomainContext
TDomainServiceContract
提供任何类型。让我们假设这样一个类:

public class MyDomainContext : DomainContext
{
    ...
}
var o = new Class1<MyDomainContext, MyDomainService>();
我可以在创建新的
Class1
时使用该类,如下所示:

public class MyDomainContext : DomainContext
{
    ...
}
var o = new Class1<MyDomainContext, MyDomainService>();
var o=newclass1();

因为它实现了
DomainContext
tdomain服务也是如此

另一种看待它的方式是在一个更简单的示例中。例如:

List<String> myStrings = new List<String>();
myStrings.Add("One");
//Etc.
List myStrings=new List();
myStrings.Add(“一”);
//等等。

在本例中,您只需确定将在类中使用哪种数据类型。示例中的情况类似。

代码和代码之间的参数是泛型类型参数。泛型,在一个非常高的层次上,允许您设计一个对一个或多个参数、属性或方法的特定类型不可知的类。用文字来解释有点困难,但泛型最常见的用法是在集合中

在泛型之前,大多数开发人员使用
ArrayList
之类的工具来跟踪对象集合。这样做的缺点是安全;因为您可以将任何
对象
放入
数组列表
,这意味着您必须将对象转换回预期的类型(使代码不那么干净),并且没有任何东西可以阻止您添加非该类型的对象(也就是说,我可以有一个
ArrayList
,我可能希望它只包含
string
对象,但我可能会意外地放入一个
int
DbConnection
,等等),直到运行时您才发现强制转换失败

ArrayList myStrings = new ArrayList();

myStrings.Add("foo");
myStrings.Add("bar");
myStrings.Add(1); // uh-oh, this isn't going to turn out well...

string string1 = (string)myStrings[0];
string string2 = (string)myStrings[1];
string string3 = (string)myStrings[2]; // this will compile fine but fail at 
                                       // runtime since myStrings[2] is an int, 
                                       // not a string
在引入泛型之后,我们得到了
List
类。这是一个接受单个泛型类型参数的单一类——即,您希望列表包含的对象类型。这样,我可以有一个
List
或一个
List
,不需要强制转换,由于索引器分别返回
string
int
,并且b)在编译时是安全的,正如我所知,除了
string
int
(再次分别)之外,没有其他东西可以放入这些列表

List<string> myStrings = new List<string>();

myStrings.Add("foo");
myStrings.Add("bar");
myStrings.Add(1); // this will not compile, as an int is not a string
List myStrings=new List();
添加(“foo”);
添加(“条”);
myStrings.Add(1);//这不会编译,因为int不是字符串

泛型的意义在于,您不关心正在处理的对象的实际类型,但类的使用者可能会关心。换句话说,列表如何存储
字符串
int
DbConnection
等的机制是相同的,但泛型使其在抽象过程中不会丢失来自类使用者的此类信息。

确实如此。谢谢,但您为什么要求关闭此问题,像其他一些用户一样,说这不是一个真正的问题?我看到在我的“消息”中有一个问号,也许它没有呈现在您的浏览器中?我需要了解这个网站是如何工作的…+1我刚刚开始学习C#,这正是我所需要的。干杯