• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

C# 2.0 Specification(泛型五)

c# 搞代码 4年前 (2022-01-09) 19次浏览 已收录 0个评论

接泛型四

20.6.5语法歧义

在§20.9.3和§20.9.4中简单名字(simple-name)和成员访问(member-access)对于表达式来说容易引起语法歧义。例如,语句

F(G<A,B>(7));

可以被解释为对带有两个参数G<A和B>(7)的F的调用[1]。同样,它还能被解释为对带有一个参数的F的调用,这是一个对带有两个类型实参和一个正式参数的泛型方法G的调用。
如果表达式可以被解本文来源gaodaimacom搞#^代%!码&网(析为两种不同的有效方法,那么在“>”能被解析作为运算符的所有或一部分时,或者作为一个类型实参列表,那么紧随“>”之后的标记将会被检查。如果它是如下之一:

{ } ] > : ; , . ?

那么“>”被解析作为类型实参列表。否则“>”被解析作为一个运算符。

20.6.6对委托使用泛型方法

委托的实例可通过引用一个泛型方法的声明而创建。委托表达式确切的编译时处理,包括引用泛型方法的委托创建表达式,这在§20.9.6中进行了描述。
当通过委托调用一个泛型方法时,所使用的类型实参将在委托实例化时被确定。类型实参可以通过类型实参列表显式给定,或者通过类型推断(§20.6.4)而确定。如果采用类型推断,委托的参数类型将被用作推断处理过程的实参类型。委托的返回类型不用于推断。下面的例子展示了为一个委托实例化表达式提供类型实参的方法。

delegate int D(string s , int i)delegate int E();class X{public static T F<T>(string s ,T t){…}public static T G<T>(){…}static void Main(){D d1 = new D(F<int>); //ok,类型实参被显式给定D d2 = new D(F); //ok,int作为类型实参而被推断E e1 = new E(G<int>); //ok,类型实参被显式给定E e2 = new E(G); //错误,不能从返回类型推断}}

在先前的例子中,非泛型委托类型使用泛型方法实例化。你也可以使用泛型方法创建一个构造委托类型的实例。在所有情形下,当委托实例被创建时,类型实参被给定或可以被推断,但委托被调用时,可以不用提供类型实参列表(§15.3)。

20.6.7非泛型属性、事件、索引器或运算符

属性、事件、索引器和运算符他们自身可以没有类型实参(尽管他们可以出现在泛型类中,并且可从一个封闭类中使用类型实参)。如果需要一个类似属性泛型的构件,取而代之的是你必须使用一个泛型方法。

20.7约束


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:C# 2.0 Specification(泛型五)

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址