另一个项目的构造函数

时间:2014-01-11 11:05:31

标签: c#

我有两个解决方案的项目 - 一个是图书馆,另一个是主要计划。 库中某个类的构造函数创建了很少的其他对象。不幸的是,当我在主项目中调用那个应该被创建的构造函数时是不可见的。有没有办法解决这个问题?

我在谈论的例子:

  
namespace Library
{                
      public class Foo
      {       
           public Bar bar;
           public Foo()
           {
               Bar bar = new Bar();    
           }
      }
 }



namespace Project1
{
     class Program
     {
         static void Main(string[] args)
         {
              Foo foo = new Foo();
              //bar is not accessible here
         }
     }
}

3 个答案:

答案 0 :(得分:1)

您需要将Bar对象分配给Foo的某个成员:

namespace Library
{
    public class Bar
    {
         // whatever inside
    }

    public class Foo
    {    
         public Bar BarMember { get; private set; }

         public Foo()
         {
             BarMember = new Bar();    
         }
    }
}



 namespace Project1
 {
     class Program
     {
         static void Main(string[] args)
         {
             Foo foo = new Foo();
             // foo.BarMember is accessible here
         }
     }
 }

<强>基本上

  • 必须将新Bar对象分配给Foo的成员
  • Bar需要在两个项目的共同范围内声明 - 只需在Library内声明它。它也必须是public - 在项目之间共享。

答案 1 :(得分:1)

您只是将bar实例字段隐藏在Foo的ctor中,因为您将bar重新声明为本地变量(您应该有编译器警告)。< / p>

就这样做:

namespace Library
{                
     public class Foo
     {       
          public Bar bar;
          public Foo()
          {
               this.bar = new Bar();    
          }
     }
}

答案 2 :(得分:1)

问题在于这一行

Bar bar = new Bar();    

这是声明一个名为bar的新局部变量,并为其分配新创建的值。这不会设置字段Foo.bar,因为本地实际上会遮挡字段。为了设置字段,删除声明

bar = new Bar();

或者,如果您想要明确,可以使用this

this.bar = new Bar();

其中任何一个都会将字段Foo.bar设置为新创建的值。然后,Foo

的创建者可以访问此内容