• 泛型小记[平日待加]初学泛型者可以看看[更新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
  • 相关阅读:
    CSS选择器
    结构体
    指针的话题
    安卓开源项目周报0208
    前端开源项目周报0207
    iOS开源项目周报0119
    安卓开源项目周报0117
    前端开源项目周报0116
    微信小程序开源项目库汇总
    iOS开源项目周报0112
  • 原文地址:https://www.cnblogs.com/RuiLei/p/649843.html
Copyright © 2020-2023  润新知