2015-06-30 3 views
0

Возможно ли создать экземпляр частного класса в другом приватном классе? (Не считая в программе main().) А также, может ли метод в частном классе возвращать объект частного типа?Создать новый экземпляр частного класса в другом приватном классе

Этот вопрос пришел, потому что я следил за Скоттом Алленом из PluralSight на Основах C# с C# 5. А на урок 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

Кики, пожалуйста, не забудьте отредактировать свое сообщение, чтобы выровнять его с вашим комментарием (я ввел ваши комментарии в качестве начальной версии, но вам нужно отредактировать его, чтобы он дал понять). –

+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 и экземпляр private1. И я прямо сказал не в Main(). – Kiki

+0

В foo() private1 создает экземпляр private2. Разве это не то, о чем вы спрашивали? ... его, безусловно, можно переключить, но почему? –

+0

Idle_Mind. Я бы отметил это как ответ, если вы можете, пожалуйста, очистить его для меня. Я не очень хорошо прочитал ваш ответ в первый раз. Вы определили свои 2 класса (Private1 и Private2) в одном классе программы. Что делать, если Private1 и Private2 были отдельными файлами (не в рамках программы)? будет ли ваш пример по-прежнему стоять? Кроме того, что произошло бы, если бы у вас не было публичного конструктора в классе 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

No. Частный класс не может получить доступ к другим классом в другом файле. Причина заключается в том, что модификатор private предназначен для инкапсуляции данных или метода внутри этого класса. Вы должны использовать общедоступный или внутренний модификатор, если хотите получить доступ к классу из другого класса, который не является вложенным. Если он вложен, вы также можете использовать защищенный модификатор.

Смежные вопросы