C#學習第十天
阿新 • • 發佈:2019-02-06
泛型:
協變: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);