在类之间进行委托——最佳实践

本文关键字:最佳 之间 | 更新日期: 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"