1.隐式类型局部变量:
用var关键字声明变量类型:
var myint=0;
var mybool=true;
var mystring="some string";
(1)隐式类型变量的限制:
不能用作类的数据成员;
不可以作为方法的返回值;
声明时必须赋值且不能赋值为NULL;
隐式类型局部数组:
//正确声明
var a=new[] {1,2,3,4};
//错误声明
var b=new[] {2.three,4,five};
2.自动属性:
可以将:
private string strName
public string PName
{
get {return strName;}
set {strName=value;}
}
直接写成:
private string strName
public string PName
{
get ;set;
}
3.扩展方法:
扩展方法允许先存已编译的类型和当前即将编译的类型在不需要被直接更新的情况下,获得功能上的扩展。
(1)扩展方法的限制:
必须把方法定义在静态类中,因此每个方法也必须声明为静态;
所有的扩展方法都需要使用关键字this对第一个参数(仅对第一个)进行修饰;
每个扩展方法只可以被内存中正确的实例调用,或者通过其所处的静态类被调用。
static class TestUtilClass
{
public static void Foo(this int i)
{
Console.WriteLine("{0} called the Foo() method.", i);
}
public static void Foo(this int i, string msg)
{
Console.WriteLine("{0} called Foo() and told me:{1}", i, msg);
}
}
(2)把一些包含扩展方法的静态类型放到独立的命名空间中后,处于同一程序集的其他命名空间可以使用标准的C#关键字using导入这些静态类型和他们包含的扩展方法。
(3)微软公司推荐把扩展方法房在独立的程序集(独立的命名空间)。
4.分部方法:
(1)分部方法的限制:
分部方法只可以定义在分部类中;
分部方法可以是静态的或实例级别的;
分部放啊可以有参数(不能有OUT修饰符);
分部方法总是隐式私有的;
5.对象初始化器:
class point
{
private int xPos, yPos;
public point(int x, int y)
{
xPos = x;
yPos = y;
}
public point() { }
public int X
{
get {return xPos;}
set {xPos=value;}
}
public int Y
{
get { return yPos; }
set { yPos = value; }
}
public override string ToString()
{
return string.Format("[{0},{1}]",xPos,yPos);
}
class Program
{
static void Main(string[] args)
{
var yetAnotherpoint = new point { X = 30, Y = 30 };
point finalpoint = new point{X = 30, Y = 30};
Console.ReadLine();
}
}