2010-08-30 67 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(); 

即,具有「同義詞」,可以指的是一個物體,或到另一個,視情況而定,以使下列操作可以總是被編碼爲「關於同義詞」,他們會以任何一種方式在「正確」的對象上(像複製整個「後續操作」塊這樣的替代品,至少是非常糟糕和重複的風格,並且,例如,當「以下操作」在其他方法中,「同義詞」是一個實例變量而不是局部變量,可能非常難以編碼)。

這當然是最簡單的例子。但是,你真的需要其他更復雜的嗎?)