C#學習第十天

泛型:

     協變:out T ,T只能用作函數返回值。

     逆變:in T,T只能用作輸入參數。

 

     逆變協變更多內容:http://cnn237111.blog.51cto.com/2359144/902824

 

  T varobj = default(T);如果T是引用類型,則default(T)=null,如果T是值類型,則default(T)等於對應的值類型默認值。

 

LINQ

linq要求查詢的對象實現IEnumerable接口

linq語法中,from ailas  in table select ailas;from的作用是爲table起了一個別名(ailas)。

 

使用group a by a.屬性 時,不能再使用select了。返回a的所有屬性字段。

 

操作符重載:

1、不能更改操作符的優先性。例如+-x/等。

2、不能更改操作符的元數(一元 二元等)

3、有些操作符不能重載例如"."

重載時注意:

1、操作符必須是public的。

2、操作符必須是靜態(static)的。操作符不具有多態性。不能使用abstract,virtual、override或sealed等修飾。

3、二元操作符必須有兩個參數。

 

class Person
    {
        public String Name
        {
            get;
            set;
        }

        public String Sex { get; set; }

        public static Boolean operator ==(Person p1, Person p2)
        {
            return p1.Name.Trim() == p2.Name.Trim();
        }
        public static Boolean operator !=(Person p1, Person p2)
        {
            return p1.Name.Trim() != p2.Name.Trim();
        }

        public static Person operator +(Person p, String name)
        {
            p.Name+=name;
            return p;
        }
        public static Person operator +( String name,Person p)
        {
            p.Name += name;
            return p;
        }

        public override int GetHashCode()
        {
            return base.GetHashCode();
        }

        public override bool Equals(object obj)
        {
            return base.Equals(obj);
        }
    }

 

使用:


Person p1 = new Person() { Name="張三", Sex="男" };
            Person p2 = new Person() { Name = "李四", Sex = "女" };

            Person pt = new Person() { Sex = "男", Name = "張三 " };

            Console.WriteLine(p1 == pt);
            Console.WriteLine(p1!=p2);

            pt =  "啊啊哈哈"+pt;
            pt = pt + "oo";
            pt += "gogo";//+=會自動轉換爲pt = pt+"gogo"

            Console.WriteLine(pt.Name);


 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章