2010-08-24 5 views
0
In the below example i want to create folder in nested class constructor: 

    namespace Nm 
    { 
     class Outer 
     { 
      private const string s1 = "@.\bin"; 

      void O1() 
      { 
       Nested nestedFile = new Nested(); 
       nestedFile.FileName = "Queue1"; 
      } 
     } 

     internal class Nested 
     { 
      public string FileName 
      { 
       set 
       { 
        Directory.CreateDirectory(s1); // ! 
        fileName = s1+ value + ".dat"; 
        Console.writeLine(fileName); 
       } 
      } 
     } 
    } 
+4

Quel est exactement le problème? – Nissim

Répondre

3

Absolument - même manière que vous le feriez normalement:

class Outer 
{ 
    private void Foo() 
    { 
     Nested nested = new Nested("bar"); 
    } 

    class Nested 
    { 
     internal Nested(string x) 
     { 
      ... 
     } 
    } 
} 
+0

OK.J'ai la première classe imbriquée instanciée a effectué un traitement/validation. puis à un certain point, la classe externe change la valeur de s1, alors? – myWorld

+1

@ starz26: les chaînes de caractères .NET sont immuables. Chaque fois que vous les modifiez, vous créez une nouvelle instance. De toute façon, les changements de chaîne externes n'affecteront pas une chaîne passée à une classe imbriquée – abatishchev

+0

@ starz26, si c'est const, vous ne pouvez pas changer la valeur, mais si vous en faites un membre de champ privé et passez une instance de la classe Outer au Constructeur imbriqué, le constructeur imbriqué peut accéder au champ privé. C'est l'un des principaux avantages des classes imbriquées, car cela vous permet de bénéficier de l'encapsulation de classe (pour organiser les responsabilités), mais vous devez quand même partager un état étroitement couplé. –

0

En ce qui vous classe est internal (pas externe- private), vous pouvez le faire suivant:

class Outer 
{ 
    internal const string s1 = "@.\bin"; 
} 

internal class Nested 
{ 
    public string FileName 
    { 
     set 
     { 
      Outer.s1;field 
     } 
    } 
} 

Mais une classe dans votre assemblage aura accès à ce champ

Questions connexes