我有一个叫做Modify
的函数。它是这样挖掘的:处理泛型时在VB.Net中的多态性
Public Function Modify(Of SIMType As {New, DAOBase})(ByVal obj As DAOBase) As Boolean
你可以看到这个函数是通用的。它将一个DAOBase或DAOBase的子类作为一个对象。
里面的修改功能有一个叫就像这样:
DAOToGP(obj)
这就是多态性的用武之地。有四个左右的子类我创建了DAOBase
。我已经为这些类型写了一个DAOToGP()
。因此,在Modify()
函数中,当它调用DAOToGP(obj)
时,多态性应该启动,它应该调用DAOToGP()
的正确实现,具体取决于我传递给Modify()
的类型。
不过,我得到以下错误:
Error 20 Overload resolution failed because no accessible 'DAOToGP' can be called without a narrowing conversion:
'Public Shared Function DAOToGP(distributor As Distributors) As Microsoft.Dynamics.GP.Vendor': Argument matching parameter 'distributor' narrows from 'SierraLib.DAOBase' to 'IMS.Distributors'.
'Public Shared Function DAOToGP(product As Products) As Microsoft.Dynamics.GP.SalesItem': Argument matching parameter 'product' narrows from 'SierraLib.DAOBase' to 'IMS.Products'. C:\Users\dvargo.SIERRAWOWIRES\Documents\Visual Studio 2010\Projects\SIM\Dev_2\SIM\IMS\DVSIMLib\GP\GPSIMRunner\Runners\RunnerBase.vb 66 39 IMS
我在这里的损失也有点。我不知道为什么它无法确定要调用哪个函数。有任何想法吗?
SIMTye在函数中使用了几个不同的地方。但为什么过载解析失败?为什么不能找到正确版本的'DAOToGP()'来使用 – user489041 2012-01-06 16:41:43