• C# 2.0 除了泛型


    [源码下载]


    C# 2.0 除了泛型



    作者:webabcd


    介绍
    C# 2.0 除了泛型之外的东东(可空类型,匿名方法,迭代器,部分类,部分方法,别名)


    可空类型

    /*
     *可空类型 
    */

    using System;
    using System.Data;
    using System.Configuration;
    using System.Collections;
    using System.Web;
    using System.Web.Security;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.UI.WebControls.WebParts;
    using System.Web.UI.HtmlControls;

    public partial class CSharp20_Nullable : System.Web.UI.Page
    {
        
    protected void Page_Load(object sender, EventArgs e)
        
    {
            
    // 针对值类型的可空类型
            Nullable<DateTime> dt = null;
            DateTime
    ? dt2 = null;

            
    // ??分配默认值
            int? x = null;
            
    int y = x ?? -1;

            
    // x的默认值为0
            Response.Write(y.ToString());
        }

    }

    运行结果
    -1


    匿名方法

    /*
     * 匿名方法
    */

    using System;
    using System.Data;
    using System.Configuration;
    using System.Collections;
    using System.Web;
    using System.Web.Security;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.UI.WebControls.WebParts;
    using System.Web.UI.HtmlControls;

    public partial class CSharp20_AnonymousMethod : System.Web.UI.Page
    {
        
    protected void Page_Load(object sender, EventArgs e)
        
    {
            Button btn 
    = new Button();
            btn.Text 
    = "按钮";
            
    // 一般方法
            btn.Click += new EventHandler(btn_Click);
            
    // 省略掉委托类型
            btn.Click += btn_Click2;
            
    // 不带参数的匿名方法
            btn.Click += delegate { Response.Write("按钮被单击(不带参数的匿名方法)<br />"); };
            
    // 带参数的匿名方法(参数数量和类型要一致)
            btn.Click += delegate(object obj, EventArgs er) { Response.Write("按钮被单击(带参数的匿名方法)<br />"); };

            Page.Form.Controls.Add(btn);
        }


        
    void btn_Click(object sender, EventArgs e)
        
    {
            Response.Write(
    "按钮被单击<br />");
        }


        
    void btn_Click2(object sender, EventArgs e)
        
    {
            Response.Write(
    "按钮被单击(省略掉委托类型)<br />");
        }

    }

    按了按钮后的运行结果
    按钮被单击
    按钮被单击(省略掉委托类型)
    按钮被单击(不带参数的匿名方法)
    按钮被单击(带参数的匿名方法)


    迭代器

    /*
     * 迭代器
     * 要实现foreach必须实现接口IEnumerable或者IEnumerator
    */

    using System;
    using System.Data;
    using System.Configuration;
    using System.Collections;
    using System.Web;
    using System.Web.Security;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.UI.WebControls.WebParts;
    using System.Web.UI.HtmlControls;

    public class Charp20Yield
    {
        
    public static IEnumerable YieldTest()
        
    {
            
    string[] ary = new string[] "a""b""c""d""e""f""g" };

            
    foreach (string s in ary)
            
    {
                
    if (s != "e")
                
    {
                    
    // 产生枚举元素
                    yield return s;
                }

                
    else
                
    {
                    
    // 中断迭代
                    yield break;
                }

            }

        }

    }



    public partial class CSharp20_Iterator : System.Web.UI.Page
    {
        
    protected void Page_Load(object sender, EventArgs e)
        
    {
            
    // 使用自定义迭代器
            foreach (string s in Charp20Yield.YieldTest())
            
    {
                Response.Write(s);
                Response.Write(
    "<br />");
            }

        }

    }

    运行结果
    a
    b
    c
    d


    partial类(注:partial class 中还可以支持 partial method,当初忘记写了,想看示例的话请参考“背水一战 Windows 10”中的相关代码)

    /*
     * partial类
    */

    using System;
    using System.Data;
    using System.Configuration;
    using System.Collections;
    using System.Web;
    using System.Web.Security;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.UI.WebControls.WebParts;
    using System.Web.UI.HtmlControls;

    // partial类可以写在不同的文件里,实际上就是取并集,类的修饰符要一致
    public partial class PartialTest : IDisposable
    {
        
    public string Get()
        
    {
            
    return "PartialTest";
        }

    }


    // partial类可以写在不同的文件里,实际上就是取并集,类的修饰符要一致
    public partial class PartialTest
    {
        
    public void Dispose()
        
    {
            
    // 略
        }

    }



    public partial class CSharp20_Partial : System.Web.UI.Page
    {
        
    protected void Page_Load(object sender, EventArgs e)
        
    {
            PartialTest pt 
    = new PartialTest();
            Response.Write(pt.Get());
            pt.Dispose();
        }

    }

    运行结果
    PartialTest


    其它

    /*
     * 其它
    */

    using System;
    using System.Data;
    using System.Configuration;
    using System.Collections;
    using System.Web;
    using System.Web.Security;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.UI.WebControls.WebParts;
    using System.Web.UI.HtmlControls;

    // 指定别名
    using xyz = System.Text;

    public partial class CSharp20_Other : System.Web.UI.Page
    {
        
    protected void Page_Load(object sender, EventArgs e)
        
    {
            CSharp20_Other_Test c 
    = new CSharp20_Other_Test();
            c.CurrentTime 
    = DateTime.Now;

            
    // 下面这句会报错
            
    // Response.Write(c.CurrentTime.ToLongDateString());

            
    // 没问题,因为set是internal的
            c[2= "insert";
            Response.Write(c[
    2]);
            Response.Write(
    "<br />");

            
    // 自定义类与framework类 类名重复时,自定义类优先
            
    // xyz是命名空间别名
            
    // 访问全局的话用gloab
            Response.Write(xyz::Encoding.Default.EncodingName);
        }

    }


    public class CSharp20_Other_Test
    {
        
    private DateTime _currentTime;
        
    public DateTime CurrentTime
        
    {
            
    // 给访问器增加修饰符
            
    // 如果接口定义访问器了,则所有继承的都是public
            protected get return _currentTime; }
            
    set { _currentTime = value; }
        }


        
    private string[] ary = new string[] "a""b""c""d""e""f""g" };
        
    public string this[int index]
        
    {
            
    get return ary[index]; }
            
    // 给索引器增加修饰符
            internal set { ary[index] = value; }
        }

    }

    运行结果
    insert
    简体中文(GB2312)


    OK
    [源码下载]

  • 相关阅读:
    飞腾1500A 上面银河麒麟操作系统 进行远程以及添加用户的方法 linux xrdp
    centos7 安装Anaconda3及使用
    机器学习(ML)中文视频教程
    spring学习笔记(26)spring整合Quartz2持久化稳健任务调度
    Cocos2d-X中使用ProgressTimer实现一些简单的效果
    总结几点关于做互联网产品的思路
    norflash和nandflash电路
    存储过程
    USACO hamming 继续暴搜
    [原理分析]Linux下的栈溢出案例分析-GDB调试操练[1]
  • 原文地址:https://www.cnblogs.com/webabcd/p/647563.html
Copyright © 2020-2023  润新知