2015-06-30 34 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是为了封装该类中的数据或方法。如果要从不嵌套的其他类访问类,则应该使用公共或内部修饰符。如果它是嵌套的,您也可以使用受保护的修饰符。

相关问题