欢迎光临极品网,更多、更新的资源信息尽在Jpinw.Com!本站所有信息资源每日更新新的内容,请大家继续关注www.Jpinw.com!如果觉得本站还不错,对您有帮助,别忘了向您的朋友推荐本站!请记好本站网址:http://www.Jpinw.com,网站发展靠大家多多的支持!!!

极品网 极品课件 极品论文 极品文学 极品游戏 极品美容 极品手机资源 极品股票

#
免费资源: 免费域名 | 免费空间 | 免费推广 | 免费邮箱 | 免费硬盘 | 免费论坛 | 免费留言 | 免费统计 | 在线投稿 | 更多...
电脑学院: 操作系统 | 安全相关 | 网页设计 | 编程开发 | 建站经验 | 服务器类 | 黑客攻防 | 菜鸟入门 | 教你网赚 | 更多...
文章导航: 网赚学堂 | 网赚秘笈 | 网赚三维 | 网赚先锋 | 网赚资讯 | 感悟网赚 | 众生百态 | 经典美文 | 范文中心 | 更多...
图酷天下: 时事图酷 | 娱乐图酷 | 搞笑图酷 | 时尚图酷 | 体育图酷 | 另类经典 | 论文资源 | 课件下载 | 文学知识 | 更多...

您现在的位置: 极品网 >> 电脑学院 >> 编程开发 >> C#VBJAVA >> 教程正文

C#2.0 Specification(泛型二)            【字体:
C#2.0 Specification(泛型二)
作者:佚名    教程来源:不详    点击数:    更新时间:2008-6-4    

 








C#2.0 Specification(泛型二)。
  接(泛型一)
这篇文章是翻译的微软的技术文章.供学习c#的朋友参考,请勿用于商业目的。http://msdn.microsoft.com/vcsharp/team/language/default.ASPx
20.1.6泛型类中的静态构造函数
在泛型类中的静态构造函数被用于初始化静态字段,为每个从特定泛型类声明中创建的不同的封闭构造类型,执行其他初始化。泛型类型声明的类型参数在作用域之内,可以在静态构造函数体内被使用。

如果下列情形之一发生,一个新的封闭构造类类型将被首次初始化。

一个封闭构造类型的实例被创建时
封闭构造类型的任何静态成员被引用时
为了初始化一个新的封闭的构造类类型,首先那个特定封闭类型的一组新静态字段(§20.1.5)将会被创建。每个静态字段都被初始化为其默认值(§5.2)。接着,静态字段初始化器(§10.4.5.1)将为这些静态字段执行。最后静态构造函数将被执行。

由于静态构造函数将为每个封闭构造类类型执行一次,那么在不能通过约束(§20.7)检查的类型参数上实施运行时检查,将会很方便。例如,下面的类型使用一个静态构造函数检查一个类型参数是否是一个引用类型。

class Gen<T>

{

static Gen(){

if((object)T.default != null){

throw new ArgumentException(“T must be a reference type”);

}

}

}



20.1.7 访问受保护的成员
在一个泛型类声明中,对于继承的受保护的实例成员的访问是允许的,通过从泛型类构造的任何类型的实例就可以做到。尤其是,用于访问§3.5.3中指定的protected和protected internal实例成员的规则,对于泛型使用如下的规则进行了扩充。

在一个泛型类G中,对于一个继承的受保护的实例成员M,使用E.M的基本表达式是允许的,前提是E的类型是一个从G构造的类类型,或继承于一个从G构造的类类型的类类型。




在例子

class C<T>

{

protected T x;

}

class D<T> :C<T>

{

static void F(){

D<T> dt = new D<T>();

D<int> di = new D<int>();

D<string> ds = new D<string>();

dt.x = T.default;

di.x = 123;

ds.x = “test”;

}

}



三个对x的赋值语句都是允许的,因为它们都通过从泛型构造的类类型的实例发生。

20.1.8在泛型类中重载
在一个泛型类声明中的方法、构造函数、索引器和运算符可以被重载。但为了避免在构造类中的歧义,这些重载是受约束的。在同一个泛型类声明中使用相同的名字声明的两个函数成员必须具有这样的参数类型,也就是封闭构造类型中不能出现两个成员使用相同的名字和签名。当考虑所有可能的封闭构造类型时,这条规则包含了在当前程序中目前不存在的类型是实参,但它仍然是可能出现的[1]。在类型参数上的类型约束由于这条规则的目的而被忽略了。

下面的例子根据这条规则展示了有效和无效的重载。



nterface I1<T> {…}

interface I2<T>{…}



class G1<U>

{

long F1(U u); //无效重载,G<int>将会有使用相同签名的两个成员

int F1(int i);

void F2(U u1, U u2); //有效重载,对于U没有类型参数

void F2(int I , string s); //可能同时是int和string

void F3(I1<U>a); //有效重载

void F3(I2<U>a);

void F4(U a); //有效重载

void F4(U[] a);}



class G2<U,V>

{

void F5(U u , V v); //无效重载,G2<int , int>将会有两个签名相同的成员

void F5(V v, U u);

void F6(U u , I1<V> v);//无效重载,G2<I1<int>,int>将会有两个签名相同的成员

void F6(I1<V> v , U u);

void F7(U u1,I1<V> V2);//有效的重载,U不可能同时是V和I1<V>

void F7(V v1 , U u2);

void F8(ref U u); //无效重载

void F8(out V v);

}

class C1{…}

class C2{…}

class G3<U , V> where U:C1 where V:C2

{

void F9(U u); //无效重载,当检查重载时,在U和V上的约束将被忽略

void F9(V v);

}

20.1.9参数数组方法和类型参数
类型参数可以被用在参数数组的类型中。例如,给定声明

class C<V>

{

static void F(int x, int y ,params V[] args);
}

方法的扩展形式的如下调用

C<int>.F(10, 20);

C<object>.F(10,20,30,40);

[1] [2] 下一篇

 

教程录入:admin    责任编辑:admin 
  • 上一篇教程:

  • 下一篇教程:
  • 发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
    最新热点 最新推荐 相关教程
    C#:Web Service异常处理
    C#:获得文件版本信息及只读文
    C#:文件的按行读/写及文件目
    C#2.0 Specification(泛型一
    C#2.0 新特性探究(二) 委托与
    C#2.0的特性
    C#2.0简介
    C#2.0语言规范(三)匿名方法
    C#2.0语言规范(四)迭代器
    C#2.0语言规范(五)不完全类
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)
    极品网
    | 设为首页 | 加入收藏 | 友情链接 | 版权声明 |
    极品网

    Copyright 2006 Jpinw.com 极品网

    备案号:浙ICP备07010375号

    极品网