【问题标题】:Why I'm not able to cast this interface?为什么我无法投射这个界面?
【发布时间】:2017-07-14 13:37:56
【问题描述】:

我将 WebServer 的引用添加到 UWP 应用。当我从模式中获得对象时,我想对另一个对象进行强制转换 这是我从 WSDL 模式 (ASMX) 得到的 WS_Utente 类:

public partial class WS_Utente : object, System.ComponentModel.INotifyPropertyChanged {

    private WS_MetodoDiContatto mETODO_DI_CONTATTO_PREFERITOField;
    private int aREARISERVATAField;
    private string sEGRETOField;

    /// <remarks/>
    [System.Xml.Serialization.XmlElementAttribute(Order=0)]
    public string ID_UTENTE {
        get {
            return this.iD_UTENTEField;
        }
        set {
            this.iD_UTENTEField = value;
            this.RaisePropertyChanged("ID_UTENTE");
        }
    }

    /// <remarks/>
    [System.Xml.Serialization.XmlElementAttribute(Order=1)]
    public string AZIENDA {
        get {
            return this.aZIENDAField;
        }
        set {
            this.aZIENDAField = value;
            this.RaisePropertyChanged("AZIENDA");
        }
    }

    public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;

    protected void RaisePropertyChanged(string propertyName) {
        System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged;
        if ((propertyChanged != null)) {
            propertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName));
        }
    }
}

我正在尝试投射到这个对象:

public interface Utente
{
    string ID_UTENTE { get; set; }
    string AZIENDA { get; set; }
}

但是当我尝试时:

public async Task<Utente> DoLogin(string Email, string Password)
{
    WS_Utente user = await service.LoginAsync(Email, Password);
    return (Utente)user;
}

它说它不能从WS_Utente 转换为Utente 类型。 我哪里错了?

【问题讨论】:

    标签: c# interface casting


    【解决方案1】:

    添加:

    public partial class WS_Utente : Utente
    {}
    

    在一个单独的文件中添加到您现有的WS_Utente 文件中。 这是允许的,因为它是一个部分类。

    【讨论】:

      【解决方案2】:

      首先,你需要继承这个接口:

      public partial class WS_Utente : Utente, System.ComponentModel.INotifyPropertyChanged
      

      第二,为什么要继承对象?默认所有类都继承自object。

      第三,所有接口都应以“I”开头,如“IUtente”

      正如mjwills 所指出的,将此方法与自动生成的代码分开实现是一种很好的做法。

      【讨论】:

      • 这是由WSDL 代码自动生成的。我不想碰它...
      • 好吧,如果你不想碰它,把它改成“public partial class WS_Utente : Utente ...”
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-25
      • 1970-01-01
      相关资源
      最近更新 更多