从C#中的另一个内部类访问一个类的属性值

时间:2010-04-14 11:15:24

标签: c# .net c#-2.0

如何从内部类访问属性值,请参阅下文?

namespace N1
{
    public class ClassA
    {
       string var1 = null;
       private ClassB  b;
       public ClassA()
       {
          var1 = "one";
          b = new ClassB();
       }
       //property 
       public string Var1
       {
          get{ return var1; }
       }
}

namespace N1
{
   internal class ClassB  
   {
     private void method()
     {
      // I need to access the value of Var1( property) from here, how to do this?
     }
   }
}

4 个答案:

答案 0 :(得分:1)

将ClassA的实例传递给ClassB的构造函数:

namespace N1
{
   internal class ClassB  
   {
     private ClassA _classAInstance;

     public void ClassB(ClassA classAInstance)
     {
         _classAInstance = classAInstance;
     }

     private void method()
     {
       // You can access _classAInstance properties here
     }

   }
}

更新:我错过了ClassB实例b是ClassA上的私有成员。使用我之前的答案,您可以在ClassA的构造函数中实例化b:

   public ClassA()
   {
      var1 = "one";
      b = new ClassB(this);
   }

答案 1 :(得分:0)

有两种方法:

  1. ClassB.Method的访问修饰符更改为公开,并使其采用字符串参数。
  2. 更新ClassB的构造函数以获取字符串参数并将其存储在私有字段中。
  3. 将公共字符串属性添加到ClassB
  4. 创建类internal只意味着该类仅适用于同一程序集中的文件。

答案 2 :(得分:0)

您需要对A类实例的引用。

因此要么改变B类构造函数来接受对A类的引用

namespace N1
{
    public class ClassA
    {
        string var1 = null;
        private ClassB b;
        public ClassA()
        {
            var1 = "one";
            b = new ClassB(this);
        }
        //property 
        public string Var1
        {
            get { return var1; }
        }
    }
}

namespace N1
{
   internal class ClassB  
   {
       ClassA classA;
       public ClassB(ClassA classARef)
       {
           classA = classARef;
       }

     private void method()
     {
      // I need to access the value of Var1( property) from here, how to do this?
         string myString = classA.Var1;
     }
   }
}

或使ClassB的私有方法()接受一个字符串? private void method(string classAVar1)

或使ClassA静态(哈哈)

答案 3 :(得分:-2)

你做不到。更改A类或B类的访问修饰符。 内部类的目的是包含一些内部逻辑实现,如果您需要从中访问公共类的字段,那么应用程序设计可能出现问题