泛型:
協變: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);