2010-08-30 62 views
0

我是面向对象编程的新手,并试图清除一些事情。对象引用基础知识

当你instatiate类,并创建一个对象,我已经看到了以下内容:

class Program 
    { 
     static void Main(string[] args) 
     { 
      MyClassA a = new MyClassA(); 

      MyClassA b = a; 

      MyClassA c = b; 

      c.DoSomething(); 
      Console.ReadLine(); 

     } 
    } 
    public class MyClassA 
    { 
     public void DoSomething() 
     { 
      Console.WriteLine("I am from Class A"); 
     } 
    } 

这可能是一个坏榜样,但我试图得到回答的问题是: 为什么指向一个对象引用另一个重要的或为什么\它在哪里使用?为什么不首先使用你创建的对象?

+0

是的,这是一个不好的例子。我看不出任何理由写这样的代码。我也看到过这样的代码,我总是鼓励作者重写它,因为它通常意味着他们正在遵循一些不好的做法。在我的代码中,我只会有“a”。 – drekka 2010-08-30 05:38:37

+0

它被使用是因为你的代码示例执行它。将一个对象复制到另一个对象只需将地址指针复制到内存中的该对象。所以如果你改变任何复制的实例,你也会改变原来的。除非您为每个要复制的实例分配一个新的内存位置,否则您当然会执行深层复制。 – 2010-08-30 05:39:53

回答

0

这是比通常的“面向对象”更多的Java-- C++将会完全不同(如果你需要“引用”对象,并改变某个变量引用的对象,你需要使用显式指针 - C++中的引用不能被“重置”)。

无论如何,无条件地创建像你的例子中的同义词没有意义和目的。更典型的用途是,例如,

MyClass a = ...whatever...; 
MyClass b = ...whatever else...; 
MyClass c; 
if(something()) { 
    c = a; 
} else { 
    c = b; 
} 
c.dosomething(); 
c.blahblah(); 
c.andmore(); 

即,具有“同义词”,可以指的是一个物体,或到另一个,视情况而定,以使下列操作可以总是被编码为“关于同义词”,他们会以任何一种方式在“正确”的对象上(像复制整个“后续操作”块这样的替代品,至少是非常糟糕和重复的风格,并且,例如,当“以下操作”在其他方法中,“同义词”是一个实例变量而不是局部变量,可能非常难以编码)。

这当然是最简单的例子。但是,你真的需要其他更复杂的吗?)