快捷搜索:

C#锐利体验(四)

1

  第四讲 类与对象

  组件编程不是对传统面向对象的扔掉 ,相反组件编程正是面向对象编程的深化和开展 。类作为面向对象的魂灵 在C#言语 里有着适当 广泛深化 的应用,很多十分 “Sharp”的组件特性乃至 都是直接由类包装而成。对类的深度把握 天然 是我们“Sharp XP”重要的一环。

  

  C#的类是一种对包括数据成员,函数成员和嵌套类型进行封装的数据结构。其间 数据成员可所以 常量,域。函数成员可所以 方法,属性,索引器,工作 ,操作符,实例构建器,静态构建器,析构器。我们将在“第五讲 构造器与析构器”和“第六讲 域 方法 属性与索引器”对这些成员及其特性作详细的剖析。除了某些导入的外部方法,类及其成员在C#中的声明和完成 通常要放在一同 。

  C#用多种修饰符来表达类的不同性质。依据 其保护级C#的类有五种不同的限制修饰符:

  public可以被任意存取;

  protected只可以被本类和其继承子类存取;

  internal只可以被本组合体(Assembly)内所有的类存取,组合体是C#言语 中类被组合后的逻辑单位和物理单位,其编译后的文件扩展名往往是“.DLL”或“.EXE”。

  protected internal仅有 的一种组合限制修饰符,它只可以被本组合体内所有的类和这些类的继承子类所存取。

  private只可以被本类所存取。

  假如 不是嵌套的类,命名空间或编译单元内的类只有public和internal两种修饰。

  new修饰符只能用于嵌套的类,表明 对继承父类同名类型的隐藏。

  abstract用来修饰笼统 类,表明 该类只能作为父类被用于继承,而不能进行对象实例化。笼统 类可以包括 笼统 的成员,但这并不是 有必要 。abstract不能和new同时用。下面是笼统 类用法的伪码:

abstract class A
{
  public abstract void F();
}
abstract class B: A
{
  public void G() {}
}
class C: B
{
  public override void F()
  {
    //方法F的完成
    }
}
 

  笼统 类A内含一个笼统 方法F(),它不能被实例化。类B继承自类A,其内包括 了一个实例方法G(),但并没有完成 笼统 方法F(),所以仍然有必要 声明为笼统 类。类C继承自类B,完成 类笼统 方法F(),于是可以进行对象实例化。

  sealed用来修饰类为密封类,阻止该类被继承。同时对一个类作abstract和sealed的修饰是没有意义的,也是被禁止的。

2

  对象与this要害 字

  类与对象的区分对我们把握 OO编程至关重要。我们说类是对其成员的一种封装,但类的封装设计仅仅是我们编程的第一步,对类进行对象实例化,并在其数据成员上施行 操作才是我们完成现实任务 的底子 。实例化对象选用 MyClass myObject=new MyClass()语法,这里的new语义将调用相应的构建器。C#所有的对象都将创建在托管堆上。实例化后的类型我们称之为对象,其核心特征便是具有 了一份自己特有的数据成员拷贝。这些为特有的对象所持有的数据成员我们称之为实例成员。相反那些不为特有的对象所持有的数据成员我们称之为静态成员,在类顶用 static修饰符声明。仅对静态数据成员施行 操作的称为静态函数成员。C#中静态数据成员和函数成员只能通过类名引用获取,看下面的代码:

using System;
class A
{
    public int count;
    public void F()
    {
        Console.WriteLine(this.count);
    }

    public static string name;
    public static void G()
    {
    Console.WriteLine(name);
    }
}
class Test
{
    public static void Main()
    {
        A a1=new A();
        A a2=new A();
        a1.F();
        a1.count=1;
        a2.F();
        a2.count=2;

        A.name="CCW";
        A.G();
    }
}

 

  我们声明了两个A对象a1,a2。关于 实例成员count和F(),我们只能通过a1,a2引用。关于 静态成员name和G()我们只能通过类型A来引用,而不可以这样a1.name,或a1.G()。

  在上面的程序中,我们看到在实例方法F()中我们才用this来引用变量count。这里的this是什么意思呢?this 要害 字引用当时 对象实例的成员。在实例方法体内我们也能够 省略this,直接引用count,实践 上两者的语义相同。理所当然的,静态成员函数没有 this 指针。this 要害 字一般用于从构造函数、实例方法和实例拜访 器中拜访 成员。

  在构造函数中this用于约束 被相同的名称隐藏的成员,例如:

class Employee
{
public Employee(string name, string alias)
{
    this.name = name;
    this.alias = alias;
    }
}

 

  将对象作为参数传递到其他方法时也要用this表达,例如:

CalcTax(this);  

您可能还会对下面的文章感兴趣: