2014-02-08 34 views
-2

我終於想出了派生類是如何工作的,......它的工作原理與我原先想象的完全相反。如何切換Class嵌套?

using UnityEngine; 
using System.Collections; 

public class TestScript : MonoBehaviour { 
    Class5 A = new Class5(); 
    Class1 B = new Class1(); 
    void Start(){ 
     A.Function5(); // 5 
     A.Function1(); // 1 
     B.Function5(); // ERROR `Class1' does not contain a definition for `Function5' and no extension method `Function5' of type `Class1' could be found (are you missing a using directive or an assembly reference?) 
     B.Function1(); // 1 
    } 
} 

public class Class1{ 
    public void Function1(){ 
     Debug.Log("1"); 
    } 
} 
public class Class2 : Class1{ 
    public void Function2(){ 
     Debug.Log("2"); 
    } 
} 
public class Class3 : Class2{ 
    public void Function3(){ 
     Debug.Log("3"); 
    } 
} 
public class Class4 : Class3{ 
    public void Function4(){ 
     Debug.Log("4"); 
    } 
} 
public class Class5 : Class4{ 
    public void Function5(){ 
     Debug.Log("5"); 
    } 
} 

Q1我怎麼會在這特定的代碼:

  • 不能夠訪問類1,2,3,4
  • 但只能訪問Class5並通過它訪問所有其他類中的其他函數。

Q2我怎麼會讓這樣的事情:

public class Class5 : Class4, Class3, Class2, Class1{ 
    public void Function5(){ 
     Debug.Log("5"); 
    } 
} 

這樣CLASS4不能讀3級,... 只有5級可以讀取所有其他類?

+3

更喜歡繼承的組合。它使得一個更易於理解的依賴關係圖。也就是說,如果你在.Net中需要多重繼承,那就用接口而不是類型繼承。 – 48klocs

+0

哇什麼是接口? – MilitaryG

回答

1

您可以在所有Function1..Function4方法而不是public尋找protected所以只有Class5可以使用函數1-4 ...

注意,在C#類只能有一個基類,像Class5:Class4 {}Class5仍然會請參閱其所有基類的受保護函數1-4)。

+0

gr8只有我現在想念的東西是我如何隱藏1,2,3級的公共類別? THO我喜歡如果我打電話給Class 1我不能訪問Func1 – MilitaryG