泛型:
协变: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);