“哪里T:somevalue”是什么意思?
where T : somevalue
意味着什么? 我刚看到一些代码说where T : Attribute
。 我认为这与generics有关,但我不确定这意味着什么或它在做什么。
有人知道吗?
它是对类型参数的约束 ,这意味着赋予generics类或方法的类型T
必须从类Attribute
inheritance
例如:
public class Foo : where T : Attribute { public string GetTypeId(T attr) { return attr.TypeId.ToString(); } // .. } Foo bar; // OK, DescriptionAttribute inherits Attribute Foo baz; // Compiler error, int does not inherit Attribute
这很有用,因为它允许generics类使用类型为T
对象执行操作,同时知道任何属于T
东西也必须是Attribute
。
在上面的示例中, GetTypeId
可以查询attr
的TypeId
,因为TypeId
是Attribute
,并且因为attr
是T
所以它必须是从Attribute
inheritance的类型。
约束也可以用于generics方法,具有相同的效果:
public static void GetTypeId(T attr) where T : Attribute { return attr.TypeId.ToString(); }
您可以对类型进行其他限制; 来自MSDN :
where T: struct
type参数必须是值类型。 可以指定除Nullable之外的任何值类型。
where T : class
type参数必须是引用类型; 这也适用于任何类,接口,委托或数组类型。
where T : new()
type参数必须具有公共无参数构造函数。 与其他约束一起使用时,必须最后指定new()约束。
where T :
type参数必须是或从指定的基类派生。
where T :
type参数必须是或实现指定的接口。 可以指定多个接口约束。 约束接口也可以是通用的。
where T : U
为T提供的类型参数必须是或者从为U提供的参数派生。这称为裸类型约束。
此外,其他人说,你也有以下内容:
这是一种限制用作generics参数的类型的方法。 所以:
where T : SomeType
意味着T必须从SomeType派生或实现接口SomeType
where子句用于限制使用generics时可以传递的参数。 在创建generics类时,根据您计划在类中使用T的方式指定参数类型可能符合您的最佳利益。 除了System.Object可以做的任何事情之外,最好使用约束,因为你会得到编译时错误和运行时。
例
如果你创建一个类
class Person where T : System.IComparable { //can now use CompareTo }
你不能不传递任何没有实现IComparable的类。 所以现在可以安全地在传递给Person类的任何东西上使用CompareTo。
上述就是C#学习教程:“哪里T:somevalue”是什么意思?分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/1002509.html