C#泛型编程指导原则(三、四)

原创 2007年09月14日 13:30:00

Item 3: Replace System.Type with Type Parameters用类型参数取代System.Type

在一些情况下,你可能在方法的签名中使用过System.Type引用,以允许在基于支持的特定类型的情况下,改变方法的行为。

如:

public object FindPerson(Type personType, int id) {}

如果使用泛型,可以成为:

public T FindPerson<T>(T personType, int id) {}

这样一来,接口将会更清晰,也可以减少方法实现的复杂性。同时意味着该方法的用户不必强迫将该方法的返回值转换成指定的类型。

Item 4: Use Type Parameters for Ref Typesref类型使用类型参数

Item2谈到了用类型参数替换Object类型的一般策略,该规则有一个变种,针对该变种引入一个新的条款还是很有必要的。本条款的焦点在于Object类型的数据作为了引用参数。

如:

public void Sort(ref object param1, ref object param2) {}

一般的客户是这样使用该方法的;

public void processItems()

 {

Person person1 = new Person(424);

Person person2 = new Person(190);

Sort(ref person1, ref person2);

}

从表面上来看这样很好。Person将被强制转换为Object类型,并传递给该方法。

如果方法没有将参数指定为ref,那么该方法也就没有什么问题了。然而使用了ref关键字后,便一起将要求传入的参数类型与方法签名中指定的参数类型精确匹配。显然,这里的PersonObject不是精确匹配。因此,这样的话,可以通过将Person转换为Object来解决,但是,这样完全没有必要。

通过泛型方法可以这样解决:

public void Sort<T>(ref T param1, ref T param2) {}

使用了泛型后,方法的类型就精确匹配了。

在很多方面,该条款看起来是条款2的重复。然而,使用ref产生的复杂关系使得该条款有单独存在的必要。

 

C#泛型编程指导原则(二)

Item 2: Replace Objects with Type Parameters使用类型参数取代Object类型在使用泛型之前,程序员一般都依赖于Object类型来获得通用性。如果有这样一个类...
  • MaybeHelios
  • MaybeHelios
  • 2007年09月14日 13:28
  • 674

C#泛型编程指导原则(19--23)

Item 19: Use Static Data Members with Caution小心使用静态数据成员对于非泛型类来说,静态数据成员被所有该类的对象所共享。然而,对于泛型类型,静态数据成员是被...
  • MaybeHelios
  • MaybeHelios
  • 2007年09月14日 19:15
  • 1329

C#泛型编程指导原则(17--18)

Item 17: Avoid Multiple Constraint Ambiguity避免多重约束中的含糊当使用约束的时候,可以选择对任何一个类型参数使用多重约束。事实上,你可以将单独的类约束与多重...
  • MaybeHelios
  • MaybeHelios
  • 2007年09月14日 19:14
  • 860

C#泛型编程指导原则(五)

Item 5: Genericize Types That Vary Only by a Data Type将由数据类型引起变化的类型泛型化如果你通读以下自己代码中现存的类、方法、接口、委托,你会发现...
  • MaybeHelios
  • MaybeHelios
  • 2007年09月14日 13:53
  • 744

C#泛型编程指导原则(一)

Item1:Use  Generic Collections 使用泛型集合数据集合是泛型最典型的应用之一。在你现存的代码里,可能已经遍布了ArrayList和HashTable。在使用泛型之前,你可能...
  • MaybeHelios
  • MaybeHelios
  • 2007年09月14日 13:27
  • 1007

C#泛型编程指导原则(15--16)

Item 15: Select the Least Restrictive Constraints选择最少限制的约束在给类型参数选择约束条件的时候,最好只加入最少的限制,不要加入不必要的附加限制。下面...
  • MaybeHelios
  • MaybeHelios
  • 2007年09月14日 19:13
  • 660

C#泛型编程指导原则(12--14)

Item 12: Custom Collections Should Extend Collection自定义集合应当扩展自Collection在一些时候,你很希望引入自己定义的泛型集合。典型来讲,自...
  • MaybeHelios
  • MaybeHelios
  • 2007年09月14日 19:11
  • 678

C#泛型编程指导原则(六、七)

Item 6: Use Expressive, Consistent Type Parameter Names使用富有表现力的、前后一致的类型参数名称对于该问题,有两大基本阵营。一方认为“单个字母”的...
  • MaybeHelios
  • MaybeHelios
  • 2007年09月14日 14:06
  • 567

C#泛型编程指导原则(十、十一)

Item 10: Prefer Type Inference with Generic Methods优先使用泛型方法的类型推测泛型方法的最帅的特性就是推测参数类型的能力,该特性可以消除为每个对泛型方...
  • MaybeHelios
  • MaybeHelios
  • 2007年09月14日 19:10
  • 580

笔记:《高效能人士的七个习惯》第五章 习惯三 要事第一——自我管理的原则

1、有效管理是把握重点的管理,它把最重要的事放在第一位。由领导决定什么是重点后,再靠自制力来掌握重点,时刻把它们放在第一位,以免被感觉、情绪或冲动所左右。 2、重要之事决不可受芝麻绿豆小事牵绊。——...
  • icamera0
  • icamera0
  • 2016年01月11日 23:14
  • 863
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C#泛型编程指导原则(三、四)
举报原因:
原因补充:

(最多只允许输入30个字)