在类之间进行委托——最佳实践
本文关键字:最佳 之间 | 更新日期: 2023-09-27 18:18:24
我有一个c#组件,它有如下的类:
namespace SharedComponent{
class TestResult {
//several members
}
}
在另一个现有的c#应用程序中,我引用这个组件,我需要实例化这个相同的类,但有一个额外的标识符,如下所示。
namespace ClientApplication {
class TestResult
{
//exact same members as above including methods
//actually the shared component class was created by gleaming
//that from this application!
int PersonID; //additional identifier
//not suitable to have in the shared component
}
}
在客户端应用程序中,有几个方法依赖于附加标识符。因此,对我来说,模拟复制构造函数并创建这个对象并填充额外的参数是非常诱人的。这样,我可以使用现有的函数,因为他们是最小的更改类。
另一种方法是将其余的细节添加为对客户端实现的引用。
namespace ClientApplication {
class TestResult {
SharedComponent.TestResult trshared = new SharedComponent.TestResult()
//but this warrants I have my class methods to delegate
//to the sharedcomponent throughout ; example below
internal bool IsFollowUp(ClientApplication.TestResult prevTest)
{
//a similar method is being used
//where a function takes the class object as parameter
trshared.IsFollowUp(prevTest.trshared);
}
int PersonID; //additional identifier
}
}
哪个选项更好?这方面的最佳实践是什么?
环境:VS2008, c#, WinXP/Win7
听起来像是您的ClientApplication。TestResult"是一个"SharedComponent.TestResult"。假设SharedComponent。TestResult不是密封的,你可以从那个类扩展。这样您就不必复制粘贴代码。如果你还能修改SharedComponent。TestResult,然后你可以声明这些方法是虚拟的,并在你的ClientApplication.TestResult中覆盖它们的行为。
class TestResult : SharedComponent.TestResult
{
int PersonId { get; set; }
override bool IsFollowUp(ClientApplication.TestResult prevTest)
{
// Your own implementation or trivial (base.IsFollowUp(ClientApplication.TestResult.prevTest.trShared)
}
}
如果你不能将SharedComponent中的方法改为virtual。TestResult,然后你可以在派生类中使用关键字"new"