泛型小记[平日待加]--初学泛型者可以看看[更新07-3-28]

在泛型类和泛型方法中产生的一个问题是,在预先未知以下情况时,如何将默认值分配给参数化类型 T: 

T 是引用类型还是值类型。

如果 T 为值类型,则它是数值还是结构。

给定参数化类型 T 的一个变量 t,只有当 T 为引用类型时,语句 t 
= null 才有效;只有当 T 为数值类型而不是结构时,语句 t = 0 才能正常使用。解决方案是使用 default 关键字,此关键字对于引用类型会返回空,对于数值类型会返回零。对于结构,此关键字将返回初始化为零或空的每个结构成员,具体取决于这些结构是值类型还是引用类型。以下来自 GenericList<T> 类的示例显示了如何使用 default 关键字。

Demo:
Class 
class = new Class();
public void get<T>(T class)
{
    
class = default(T);
}


result: 
class =null;

1.泛型和泛型强制转换

 1using System;
 2using System.Collections.Generic;
 3using System.Text;
 4
 5namespace VS2005Demo2
 6{
 7
 8    C# 编译器只允许将泛型参数隐式强制转换到 Object 或约束指定的类型
23
24    编译器允许您将泛型参数显式强制转换到其他任何接口,但不能将其转换到类
36
37
38    使用临时的 Object 变量,将泛型参数强制转换到其他任何类型
48
49    使用is和as运算符
63
64}

65


2.继承和泛型

  1using System;
  2using System.Collections.Generic;
  3using System.Text;
  4
  5namespace VS2005Demo2
  6{
  7    继承和泛型
 17
 18    继承约束
 36
 37    虚拟方法
 62
 63    接口、抽象类继承
 78
 79    泛型抽象方法和泛型接口
119
120}

121


3.泛型方法

  1using System;
  2using System.Collections.Generic;
  3using System.Text;
  4
  5namespace VS2005Demo2
  6{
  7
  8    泛型方法
 26
 27    编译器无法只根据返回值的类型推断出类型
 44
 45    泛型方法约束
 52
 53    泛型虚拟方法
 92
 93    泛型静态方法
129}

130


4.泛型委托

 1using System;
 2using System.Collections.Generic;
 3using System.Text;
 4
 5namespace VS2005Demo2
 6{
 7    泛型委托
31
32    委托泛型参数
62
63    委托泛型参数
66
67    事件
95}

96

public class Customer
{
      
private int _seqnum;

      
public int SequenceNumber {
            
get { return _seqnum; }
            
set { _seqnum = value; }
      }


      
private string _name;

      
public string Name {
            
get { return _name; }
            
set { _name = value; }
      }


      
private DateTime _lastPurchaseDate;

      
public DateTime LastPurchaseDate {
            
get { return _lastPurchaseDate; }
            
set { _lastPurchaseDate = value; }
      }

 
      
public Customer(int seqnum, string name, 
        DateTime lastPurchaseDate) 
{
            SequenceNumber 
= seqnum;
            Name 
= name;
            LastPurchaseDate 
=lastPurchaseDate;
      }

}


 
protected void Page_Load(object sender, EventArgs e)
    
{
        List
<Customer> items = new List<Customer>();
        items.Add(
new Customer(1, "howard", new DateTime(2006, 1, 1)));
        items.Add(
new Customer(2, "lee", new DateTime(2006, 2, 1)));
        items.Add(
new Customer(3, "dierking", new DateTime(2006, 3, 1)));
        items.Add(
new Customer(4, "jennifer", new DateTime(2006, 4, 1)));
        items.Add(
new Customer(5, "christine", new DateTime(2006, 5, 1)));
        items.Add(
new Customer(6, "hannah", new DateTime(2006, 6, 1)));
        items.Add(
new Customer(7, "leah", new DateTime(2006, 7, 1)));
        items.Add(
new Customer(8, "anne", new DateTime(2006, 8, 1)));
        items.Add(
new Customer(9, "dan", new DateTime(2006, 9, 1)));
        items.Add(
new Customer(10, "mary", new DateTime(2006, 10, 1)));

        Customer ret;

        
//find customer by a specified name
        string searchName = "howard";
        ret 
= items.Find(delegate(Customer cust) { return cust.Name == searchName; });
        
        
//find customer by an id
        int searchID = 4;
        ret 
= items.Find(delegate(Customer cust) { return cust.SequenceNumber == searchID; });
    }


    
public Customer FindCustomerByName(IEnumerable cutsomers, string name)
    
{
        
foreach (Customer customer in cutsomers)
        
{
            
if (customer.Name == name)
            
{
                
return customer;
            }

        }

        
return null;
    }
此方法段本人只是实践一下泛型+委托。<看不懂要反馈>
delegate L GetDefaultDomain<L>(string domainName);

SearchDomain
posted @ 2007-02-13 23:22  RicoRui  阅读(326)  评论(0)    收藏  举报