2014-02-24 59 views
1

我得到了一個C#項目,我需要一個基類和兩個子類,我希望子類對基類是私有的。這是它的樣子:兩個私有子類到一個公共類

public class MyBaseClass 
{ 
    public void doMyWork() 
    { 
     doSubClass1(); 
     doSubClass2(); 
    } 
} 

private class MySubClass1 
{ 
    public void doSubClass1() 
    { 
     //Do stuff 
    } 
} 

private class MySubClass2 
{ 
    public void doSubClass2() 
    { 
     //Do stuff 
    } 
} 

我怎麼能得到這個工作?

+5

我不明白你需要什麼。請更改您的問題 –

+1

對不起,但所提供的代碼甚至沒有編譯,因爲MybaseClass'不能「看到」其他類中的方法(目前不是子類)。你想完成什麼? –

+1

做到這一點,我看到它的唯一方法是公共類MyBaseClass {私人類MySubClass1 {}私人類MySubClass2 {}}這將封裝在您的基類中的這兩個類。但請注意,這是非常糟糕的設計!您應該重新考慮您的架構以避免這種情況。 – woutervs

回答

3

如果課程本身不是私密的,但仍然包裹在您的基地&以外,難道不會傷害嗎?

public class MyBaseClass 
{ 
    private readonly MySubClass1 _sub1 = new MySubClass1(); 
    private readonly MySubClass2 _sub2 = new MySubClass2(); 

    public void DoMyWork() 
    { 
     _sub1.DoSubClass1(); 
     _sub2.DoSubClass2(); 
    } 
} 

public class MySubClass1 
{ 
    public void DoSubClass1() { /* Do stuff */ } 
} 

public class MySubClass2 
{ 
    public void DoSubClass2() { /* Do stuff */ } 
} 

如果這不夠好,你需要那些在單獨的文件,如你所說,那麼你可以使用部分類,就像這樣。

Class文件

public partial class MyBaseClass 
{ 
    public void DoMyWork() 
    { 
     (new MySubClass1()).DoSubClass1(); 
     (new MySubClass2()).DoSubClass2(); 
    } 
} 

Class2.cs文件

public partial class MyBaseClass 
{ 
    private class MySubClass1 
    { 
     public void DoSubClass1() { /* Do stuff */ } 
    } 
} 

Class3.cs文件

public partial class MyBaseClass 
{ 
    private class MySubClass2 
    { 
     public void DoSubClass2() { /* Do stuff */ } 
    } 
} 

但仍然是不太清楚你想在這裏實現什麼。

+0

這是我尋找的最後一個例證。謝謝 –

2

如果您將您的子類放入基類中,則基類可以訪問它們。要使用你的榜樣,它會是這樣:

public class MyBaseClass 
{ 
    public void doMyWork() 
    { 
     new MySubClass1().doSubClass1(); 
     new MySubClass2().doSubClass2(); 
    } 

    private class MySubClass1 
    { 
     public void doSubClass1() 
     { 
      //Do stuff 
     } 
    } 

    private class MySubClass2 
    { 
     public void doSubClass2() 
     { 
      //Do stuff 
     } 
    } 

} 

注意,我所做的只是移動最後}底部。

+2

'MyBaseClass'沒有'doSubClass1'和'doSubClass2'方法 – Grundy

+2

您需要一個實例來調用這些方法: )和...這不是子類。 –

相關問題