如题 c#中一个类继承class是什么含义?如 public class A:class{ } 更新 谢谢 @边城狂人 ,问题的由来是这样的,我在某个地方看到过一段代码,大体是: public class A<T> where T:class { } 我将这个泛型约束理解成了普通的类继承,所以才提出上面错误的问题。 @HSFZXJY 我不认为这是一个特别基础的问题,sf上不应该只是写高冷的文章和问答,基础的问题不应该被忽视。 问题重新修改为:如何理解泛型类的如下约束? public class A<T> where T:class { }
泛型约束就好说了嘛,在泛型类型定义之后(class 中或者 method 中)使用 where 约束泛型类型,有点像继承的语法。 可以直接参考微软的类型参数的约束(C#编程指南) 约束 说明 where T: struct 类型参数必须是值类型。 可以指定除 Nullable 以外的任何值类型。 有关更多信息,请参见使用可以为 null 的类型(C# 编程指南)。 where T : class 类型参数必须是引用类型;这一点也适用于任何类、接口、委托或数组类型。 where T : new() 类型参数必须具有无参数的公共构造函数。 当与其他约束一起使用时,new() 约束必须最后指定。 where T : <base class name> 类型参数必须是指定的基类或派生自指定的基类。 where T : <interface name> 类型参数必须是指定的接口或实现指定的接口。 可以指定多个接口约束。 约束接口也可以是泛型的。 where T : U 为 T 提供的类型参数必须是为 U 提供的参数或派生自为 U 提供的参数。
假設你有個類是長這樣: class myClass<T> where T: Stream 那麼你在實體化 new mayclass 時: 有效: new myClass<Stream>(); 無效: new myClass<string>(); 原因是你的條件約束了實體化時所傳入的類的型態需要實作Stream 這個類約束。如果所傳入的是 string 在這邊就會發生錯誤。如果不讓它發生例外錯誤,就把 where T: Stream 拿掉就可以了。
泛型约束就好说了嘛,在泛型类型定义之后(class 中或者 method 中)使用
where
约束泛型类型,有点像继承的语法。可以直接参考微软的类型参数的约束(C#编程指南)