VB.NET - 我正在重构并可以使用一些帮助

时间:2011-08-26 15:02:18

标签: vb.net generics delegates

我正在使用vb.net,wcf,wpf,我正在重构工作代码,希望能够减少一些冗余。我有一堆方法在整个代码中的几个地方被调用,彼此之间只有轻微的变化,我想用一个方法替换它们。

具体来说,每个冗余方法都处理包含我创建的不同对象的1-d数组。这些不同的对象类型中有几种,每种都有不同的签名,但它们都具有“名称”和“Id”属性。 (此外,这些对象没有共享基类,但如果需要,我可以添加它。)每个冗余方法都处理不同的对象类型。

要重构代码,我想将任何不同的对象数组传递给一个可以访问“name”和“id”属性的新方法。我试图以一种方式编写这种新方法,如果我在路上创建更多对象,则不需要我更新它。

我已经完成了对Delegates和Generic Classes的一些阅读,但我无法弄清楚它是如何适应的。几乎就好像我想要创建一个可以处理我的每个对象类型的泛型类但是然后不知何故还可以访问不同对象类型的“name”和“id”属性。

您可以提供任何帮助。另外,请记住这个项目是用VB.net编写的。

由于 麦克

2 个答案:

答案 0 :(得分:1)

听起来好像让对象实现一个公共接口或者拥有一个共享基类是最好的。如果您需要将类传递给必须从其他未实现接口的其他类派生的方法,接口将为您提供最大的灵活性。但是,实现接口的基类也可能只是为了减少这些属性的重复声明。

Public Interface IThingThatHasNameAndId 'good name not included
    ReadOnly Property Name As String
    ReadOnly Property Id As Integer
End Interface

一旦有了接口,就可以将实现接口的类型数组作为IEnumerable(Of IThingThatHasNameAndId)传递,或者使用T()制作一个通用方法,并将T约束到接口。

答案 1 :(得分:0)

创建一个具有Name和ID属性的基类,然后你可以创建一个方法来接收从该类中获取的任何类。

Public Function TestFunction(Of t As YourBaseClass)(Byval obj As t) As Boolean

   If obj.Name = "Some Name" AndAlso obj.ID = 1 Then

      Return True

   Else

      Return False

   End If

End Function