C#中的基本类型都是值类型是在栈中创建的,而对象是引用类型是在堆中创建的,需要使用new关键字。
构造方法:
构造方法与类同名,没有返回类型。
This关键字:
限定被相似的名称隐藏的成员,例如:
public Employee(string name, string alias)
{
// Use this to qualify the fields, name and alias:
this.name = name;
this.alias = alias;
}
将对象作为参数传递到其他方法
Class myClass
{
Public void foo(OtherClass otherObject)
{
otherObject.Bar(this);
}
}
有一个myClass.foo的方法,在方法中调用otherObject.Bar方法,传入对myClass当前实例的引用。这样Bar方法就可以使用当前myClass当前实例的公开方法和成员了。
声明索引器,例如:
public int this[int param]
{
get { return array[param]; }
set { array[param] = value; }
}
由于静态成员函数存在于类一级,并且不是对象的一部分,因此没有 this 指针。 在静态方法中引用 this 是错误的
从重载构造方法中调用另一个:
Class myClass
{
Public myCall (int i)
{
//
}
Public myCall ():this(42)
{
//
}
}
这个例子中,默认构造方法使用this关键字调用参数为整数的重载构造方法
静态成员:
非静态类可以包含静态的方法、字段、属性或事件。 即使没有创建类的实例,也可以调用该类中的静态成员。 始终通过类名而不是实例名称访问静态成员。 无论对一个类创建多少个实例,它的静态成员都只有一个副本。 静态方法和属性不能访问其包含类型中的非静态字段和事件,并且不能访问任何对象的实例变量(除非在方法参数中显式传递)。
更常见的做法是声明具有一些静态成员的非静态类,而不是将整个类声明为静态类。 静态字段有两个常见的用法:一是记录已实例化对象的个数,二是存储必须在所有实例之间共享的值。
静态方法可以被重载但不能被重写,因为它们属于类,不属于类的任何实例。
虽然字段不能声明为 static const,但 const 字段的行为在本质上是静态的。 这样的字段属于类型,不属于类型的实例。 因此,可以同对待静态字段一样使用 ClassName.MemberName 表示法来访问 const 字段。 不需要对象实例。
C# 不支持静态局部变量(在方法范围内声明的变量)。
instances
public class Cat
{
public Cat()
{
instances++;
}
public static void HowManyCats()
{
Console.WriteLine("{0} cats adopted",
instances);
}
private static int instances = 0;
}
public class Tester
{
static void Main()
{
Cat.HowManyCats();
Cat frisky = new Cat();
Cat.HowManyCats();
Cat whiskers = new Cat();
Cat.HowManyCats();
Console.ReadLine();
}
}
如果声明了静态构造方法,必须保证静态构造方法在实例创建前运行。静态构造方法前没有访问修饰符,且不能访问非静态成员变量,故上例中instance 也是静态变量