当前位置:  开发笔记 > 编程语言 > 正文

"哪里T:somevalue"是什么意思?

如何解决《"哪里T:somevalue"是什么意思?》经验,为你挑选了2个好方法。

什么where T : somevalue意思?我刚刚看到一些代码说where T : Attribute.我认为这与泛型有关,但我不确定这意味着什么或它在做什么.

有人知道吗?



1> Daniel LeChe..:

它是对类型参数约束,这意味着T赋予泛型类或方法的类型必须从类继承Attribute

例如:

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

这很有用,因为它允许泛型类使用类型的对象执行操作T,并且知道任何T必须也是的Attribute.

在上面的例子中,可以GetTypeId查询TypeIdof,attr因为TypeId是a的属性Attribute,因为它attr是一个T必须是继承自的类型Attribute.

约束也可以用于泛型方法,具有相同的效果:

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提供的参数派生.这称为裸类型约束.



2> leppie..:

此外,其他人说,你也有以下内容:

new() - T必须有默认构造函数

class - T必须是引用类型

struct - T必须是值类型

推荐阅读
凹凸曼00威威_694
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有