【问题标题】:C# to VB interface conversion errorC#到VB接口转换错误
【发布时间】:2014-12-29 14:01:21
【问题描述】:

这里是 C# 代码

namespace WpfApplication9.ViewModels.Interfaces
{
    public interface ITradeViewModel
    {
        ObservableCollection<Trade> GetTrades();
    }
}

namespace WpfApplication9.ViewModel
{
    public class TradesViewModel : BaseViewModel, ITradeViewModel
    {
        private ObservableCollection<Trade> _trades = new ObservableCollection<Trade>();

        private ICommand _saveCommand;
        private ICommand _loadCommand;

        public TradesViewModel()
        {
            _saveCommand = new SaveTradesCommand();
            _loadCommand = new LoadTradesCommand();
            _trades = GetTrades();
        }

        public ObservableCollection<Trade> Trades { get {return _trades;} }

        public ObservableCollection<Trade> GetTrades()
        {
            if (_trades == null || _trades.Count == 0)
                _loadCommand.Execute(_trades);
            return _trades;
        }
    }
}

当我将其转换为 VB 时,如下所示,

Namespace WpfApplication9.ViewModels.Interfaces
    Public Interface ITradeViewModel
        Function GetTrades() As ObservableCollection(Of Trade)
    End Interface
End Namespace


Namespace WpfApplication9.ViewModel
    Public Class TradesViewModel
        Inherits BaseViewModel
        Implements ITradeViewModel

        Private _trades As New ObservableCollection(Of Trade)()

        Private _saveCommand As ICommand
        Private _loadCommand As ICommand

        Public Sub New()
            _saveCommand = New SaveTradesCommand()
            _loadCommand = New LoadTradesCommand()
            _trades = GetTrades()
        End Sub

        Public ReadOnly Property Trades() As ObservableCollection(Of Trade)
            Get
                Return _trades
            End Get
        End Property

        Public Function GetTrades() As ObservableCollection(Of Trade)
            If _trades Is Nothing OrElse _trades.Count = 0 Then
                _loadCommand.Execute(_trades)
            End If
            Return _trades
        End Function
    End Class
End Namespace

它会返回一个错误,告诉我接口 ITradeViewModel 的 GetTrades 未实现?

我做错了什么?

谢谢,

【问题讨论】:

  • 你必须明确使用 vb.net - msdn.microsoft.com/en-us/library/28e2e18x.aspx
  • VB 需要你更加明确。将光标放在 Imeplements 行,点击回车,它将为所需的方法/成员等添加模板Implements ITradeViewModel.GetTrades
  • 谢谢,原来这么简单。有时转换工具甚至无法正确执行。

标签: c# vb.net


【解决方案1】:

您必须通过添加Implements ITradeViewModel.GetTrades来显式实现该方法:

    Public Function GetTrades() As ObservableCollection(Of Trade) Implements ITradeViewModel.GetTrades
        If _trades Is Nothing OrElse _trades.Count = 0 Then
            _loadCommand.Execute(_trades)
        End If
        Return _trades
    End Function

VB.NET,不像 C#,does not have implicit interface implementation

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-12-01
    • 2020-12-22
    • 2023-04-08
    • 1970-01-01
    • 2014-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多