<p style="background: gray; color: #ffffff; font-size: 18pt;">前言
方法作为其他方法的参数来传递,而C#2.0 中提出的泛型特性则使类型可以被参数化,从而不必再为不同的类型提供特殊版本的实现方法。方法和迭代器3个优美的特性。
1,泛型1.1 泛型是什么方法就可以操作多种数据类型的目的。泛型是将方法实现行为与方法的数据类型分离,实现了代码重用。
Main(
List<> intList = List<> 添加元素3
intList.Add(
List<> stringList = List<> 添加元素
stringList.Add( }
代码中,List 是.Net 类库中实现的泛型类型,T是泛型参数(可理解为形参), 如果想实例化一个泛型类型,必须传入实际的参数类型。
代码重用外,还提供了更好的性能和类型安全特性. 前面关于拆箱装箱讲过. 应用类型和值类型间存在着相互转换,转换的过程称为装箱和拆箱. 这对过程会引起一定的性能损失. 而泛型是避免性能损失的有效方法.
代码中,T就是类型参数. 无论调用类型方法还是初始化泛型实例,都需要用真实类型来替换T. 可以将T理解为类型的一个占位符,即告诉编译器,在调用泛型时必须为其指定一个实际类型.
DictionaryStringKey : Dictionary<,T>
Main( 是一个开放类型,它有两个类型参数
Type t = (Dictionary<,> 是一个封闭类型
t = (DictionaryStringKey<> }
函数问题
TypeWithStaticField
函数
Console.WriteLine(field + +
Main(
TypeWithStaticField<>.field = TypeWithStaticField<>.field = TypeWithStaticField.field =
NoGenericTypeWithStaticField.field = NoGenericTypeWithStaticField.field = NoGenericTypeWithStaticField.field =
TypeWithStaticField<> TypeWithStaticField<> TypeWithStaticField }
内容还会继续补充.
类型,即可空类型. C# 2.0 提供和的可空类型是Nullable和Nullable. (可控类型的定义是public struct Nullable where T:struct,T只能为值类型)
Nullable value = 1;
代码函数,提高了代码的可读性:功能差不多,类似于: x = nullHasValue.HasValue ? b.value : 12;
获取值,并对该值进行装箱操作.
Nullable<> nullable = ? nullableWithoutValue =
,这一点需要特别注意
nullable.GetType();
调用方法时将出现异常,所以一般引用类型调用方法前,最好先检查下它是否为null
obj = obj.GetType();
value = (
nullable = (?)obj;
调用函数时会抛出空引用异常,但是仍然可以访问HasValue属性.属性.
方法方法就是没有名字的方法. 因为没有名字,匿名方法只能在函数定义的时候被调用,在其他任何情况下都不能被调用.方法和委托有着莫大的关系. 下面用代码来说明二者之间的关系. 首先回顾委托的使用方法.
VoteDelegate( Main( 方法来实例化委托对象
VoteDelegate voteDelegate = VoteDelegate( 方法直接赋给了委托对象
调用委托来回调Vote()方法,这是隐式调用方式
voteDelegate(
方法
Vote( Console.WriteLine( }
方法的类类型,既然委托方法也是方法,当然可以被委托类型包装了,所以我们还可以用匿名方法的方式去实现前面的代码:
VoteDelegate( Main( 方法来实例化委托对象
VoteDelegate voteDelegate = ( Console.WriteLine(
调用委托来回调Vote()方法,这是隐式调用方式
voteDelegate( }
代码可以看出,若使用了匿名方法,就不再需要单独定义一个Vote方法了,这减少了代码行数,更有利于程序阅读. 方法也有缺点: 不能再其他地方被调用,即不具有重复性. 所以如果委托包装的方法相对简单,并且该方法在其他地方的调用频率较低,我们就可以考虑用匿名方法来实例化委托对象了.
接口. 自定义迭代器变得容易了很多.
方法GetEnumerator(),它返回一个可用于循环访问集合的IEnumerator对象,如下面代码所示:
[DispId(- }
实现方法:
[ComVisible( [Guid(
Current {
}