2009-02-03 67 views
3

我创建了这样一个constuctor对象...C#传递当前对象到另一个对象?

public class BusinessLogic() 
{ 

    public BusinessLogic() 
     { 

      BusinessLogicSubClass blsc = new BusinessLogicSubClass(and I want to pass in BusinessLogic here) 
     } 
} 

,因为我想BusinessLogicSubClass到回调用它完成一个方法或其他当内BusinessLogic变化的方法我这样做。 BusinessLogicSubClass还使用构造函数注入为了使我的单元测试与NMock2一起工作。

这里的任何建议将有助于提前谢谢你!

回答

5
public BusinessLogic() 
    { 
     BusinessLogicSubClass blsc = new BusinessLogicSubClass(this); 
    } 

这个(解决乔恩斯基特的评论),另一种是将有一个构造函数,一个初始化,它采用了“this”指针:

public class BusinessLogic 
{ 
    private BusinessLogicSubClass blsc = null; 

    public BusinessLogic() {} 

    public void Initialize() 
    { 
     blsc = new BusinessLogicSubClass(this); 
    } 
} 

public class Implementor 
{ 
    public void SomeFunction() 
    { 
     BusinessLogic bl = new BusinessLogic(); 
     bl.Initialize(); 
    } 
} 
6

您可以在一个使用this构造函数。但这通常不是一个好主意,因为它意味着在对象构建完成之前你已经发布了一个引用。

这不是很清楚为什么你要在类中创建一个子类 - 虽然我怀疑你的继承层次可能不理想。你能否提供更多的细节,以便我们能够推荐更好的设计模式?

+0

我同意这一点。如果你打算使用这个,我会确保它是最后一个陈述。 Danny的基础课程将成为未来之路。 – 2009-02-03 17:30:41

+0

回复:层次不理想:确实如此,但这可能也适用于层次结构之外的某个类。我猜他在这里实际上可能不是“子类”。 – TheSmurf 2009-02-03 17:35:01

0

我猜你想通过它你刚刚创建的类。使用传递当前对象的this关键字。

public class BusinessLogic() 
{ 

    public BusinessLogic() 
     { 

      BusinessLogicSubClass blsc = new BusinessLogicSubClass(this) 
     } 
} 
0

那么,你想是这样的:

public class BusinessTest 
{ 
    private BusinessSubTest aSub; 

    public BusinessTest() 
    { 
     aSub = new BusinessSubTest(this); 
    } 

} 

public class BusinessSubTest 
{ 
    public BusinessSubTest(BusinessTest aTest) 
    { 

    }  
} 

还是我误解的问题?

0

“this”如何?

public BusinessLogic() 
{ 
    BusinesLogicSubClass blsc = new BusinessLogicSubClass(this); 
} 
1

你能使用上的属性延迟实例推迟BusinessLogicSubClass的,因为当你需要它的实例化和当BusinessLogic已完成建设?我认为这会是一个更好的设计。例如。

public class BusinessLogic { 

    private BusinessLogicSubClass mChild; 

    public BusinessLogic() { 
    } 

    public BusinessLogicSubClass Child { 
     get { 
      return mChild ?? (mChild = new BusinessLogicSubClass(this)); 
     } 
    } 

    public class BusinessLogicSubClass { 
     public BusinessLogicSubClass(BusinessLogic parent) { 
     } 
    } 
} 

使用延迟实例化,以防止通过this在原来的构造是不是一个没有正确构造的对象是个好主意 - 尽管也依赖于其他人是怎么回事,没问题。

0

如何使用构造BusinessLogic的静态方法,然后构造将BusinessLogic实例传递到其构造函数的BusinesLogicSubClass。

然后使用BusinessLogic实例上的属性传递BusinesLogicSubClass?

例如...

public class BusinessLogic 
{ 
    private BusinessLogicSubClass subClass; 

    private BusinessLogic() 
    { 
    } 

    public static BusinessLogic CreateBusinessLogic() 
    { 
     BusinessLogic bl = new BusinessLogic(); 
     BusinessLogicSubClass blsc = new BusinessLogicSubClass(bl); 

     bl.subClass = blsc; 
     return bl; 
    } 
} 

所以构造函数被标记为私有,这样构造对象的唯一方法是通过像这样的静态方法的调用...

BusinessLogic bl = BusinessLogic.CreateBusinessLogic(); 
0

看起来好像这是工作。我以为这是给我一个错误。

使用Initialize而不是构造函数听起来不错,我想我会切换到它。

懒惰的实例化看起来不错,但是这个类现在是启动这个应用程序的类。也许我需要更多的东西来完成这项工作?(就像那些称为属性的东西?我想我有一个可以懒惰的来电者实例化这个..我必须更多地考虑这个问题..

我必须说从Si保持我离开我的领域,真正理解答案,也许一个例子会帮助我理解,

感谢您的帮助,我将在以后尝试注册,因为这是第一次尝试使用Stack Overflow工作很好。 :)

相关问题