2015-06-30 33 views
0

是否可以在另一個私有類中創建私有類的實例? (不包括在main()程序中。) 而且,私有類中的方法是否有可能返回私有類型對象?在另一個私有類中創建私有類的新實例

這個問題出現是因爲我跟隨C#基礎與C#5上的PluralSight的Scott Allen。而在第2課關於類和對象,他有一個代碼示例如下:

public GradeStatistics ComputeStatistics() 
{ 
    GradeStatistics stats = new GradeStatistics(); 
    ... 
    ... 
} 

在一個單獨的類文件中定義一樣GradeStatistics:

class GradeStatisticss 
{ 

} 

內聯的評論:我不是說關於嵌套類。我的意思是,你有兩個類(單獨的文件),我想知道如果一個類可以創建另一個類的實例(知道它們都是私有的)。

Edited with examples: 

    private class Example1 
    { 

    } 

    private class Example2 

    { 
     public Example1 DoSomeComputation() 
     { 
      return new Example1(); 
     } 
    } 

    private class Example3 
    { 
     Example1 ex1 = new Example1(); 
    } 

Is Example3 able to create ex1? Can Example2 return a new instance of Example1? 
+0

你應該分別問這兩個問題。 –

+0

Kiki,請確保編輯您的帖子,以便將其與您的評論對齊(我已將您的評論作爲初始版本進行了標記,但您需要對其進行編輯以使其更清楚)。 –

+0

謝謝阿列克謝。新增示例 – Kiki

回答

0

不知道到底你腦子裏的東西,但這裏有一個可能的例子:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 

namespace ConsoleApplication26 
{ 
    class Program 
    { 

     static void Main(string[] args) 
     { 
      private1 p1 = new private1(); 
      private2 p2 = p1.foo(); 
      Console.WriteLine(p2.Value); 
      Console.ReadLine(); 
     } 

     private class private1 
     { 

      public private2 foo() 
      { 
       private2 p2 = new private2("I was created inside a different private class!"); 
       return p2; 
      } 

     } 

     private class private2 
     { 

      private string _value; 
      public string Value 
      { 
       get { return _value; } 
      } 

      public private2(string value) 
      { 
       this._value = value; 
      } 
     } 

    } 
} 
+0

感謝您的輸入。但那不是我的問題。在你的例子中,private2可以創建和實例化。我明確表示不在Main()中。 – Kiki

+0

在foo()中,private1正在創建private2的一個實例。這不是你要問的東西嗎?......它當然可以轉換,但爲什麼? –

+0

Idle_Mind。如果您能爲我清除它,我會將它標記爲答案。我第一次沒有很好地閱讀你的答案。您在同一個程序類中定義了2個類(Private1和Private2)。如果Private1和Private2是單獨的文件(不在Program下)?你的榜樣仍然站立?另外,如果你在Private2類中沒有公共構造函數會發生什麼? – Kiki

1

是否有可能在另一個私有類來創建一個私有類的實例?

只有在想要創建實例的私有類中聲明要爲其創建實例的私有類時。如果它們不是嵌套的,那是不可能的。

私有類中的方法是否可以返回私有類型對象?

是的,它可以。

下面是一些代碼顯示一切融合在一起:

public class Tester { 

    private class ThePrivateCreator { 

     private class TheOtherPrivateClass { 
     } 

     public Object createObject() { 
      return new TheOtherPrivateClass(); 
     } 

    } 

    public void canWeDoThis() { 
     ThePrivateCreator c = new ThePrivateCreator(); 
     Console.WriteLine(c.createObject()); 
    } 

} 


class Program 
{ 
    public static void Main(string[] args) { 
     Tester t = new Tester(); 
     t.canWeDoThis(); 
    } 
} 
1

號private類不能被另一個類在不同的文件訪問。之所以這樣,是因爲修飾符private是爲了封裝該類中的數據或方法。如果要從不嵌套的其他類訪問類,則應該使用公共或內部修飾符。如果它是嵌套的,您也可以使用受保護的修飾符。

相關問題