1. 程式人生 > >C#學習第十天

C#學習第十天

泛型:

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

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

  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);