首页 > 代码库 > 类与对象

类与对象

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 也是静态变量