泛型小记[平日待加]初学泛型者可以看看[更新07328]

在泛型类和泛型方法中产生的一个问题是,在预先未知以下情况时,如何将默认值分配给参数化类型 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(200611)));
        items.Add(
new Customer(2"lee"new DateTime(200621)));
        items.Add(
new Customer(3"dierking"new DateTime(200631)));
        items.Add(
new Customer(4"jennifer"new DateTime(200641)));
        items.Add(
new Customer(5"christine"new DateTime(200651)));
        items.Add(
new Customer(6"hannah"new DateTime(200661)));
        items.Add(
new Customer(7"leah"new DateTime(200671)));
        items.Add(
new Customer(8"anne"new DateTime(200681)));
        items.Add(
new Customer(9"dan"new DateTime(200691)));
        items.Add(
new Customer(10"mary"new DateTime(2006101)));

        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
原文地址:https://www.cnblogs.com/RuiLei/p/649843.html