什么';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#,这正是我所需要的。干杯