当前位置:  开发笔记 > 编程语言 > 正文

C#双重标准?

如何解决《C#双重标准?》经验,为你挑选了1个好方法。

我在两个类中做了完全相同的事情,在一个编译器允许它很好,但另一个给我一个错误.为什么双重标准?有15个类使用相同的模式,但只有一个拒绝编译,说以下错误:

'AWWAInvoicingXML.AwwaTransmissionInfo'未实现接口成员'AWWAInvoicingXML.IXmlSerializable.fromXML(System.Xml.XmlDocumentFragment)'.'AWWAInvoicingXML.AwwaTransmissionInfo.fromXML(System.Xml.XmlDocumentFragment)'是静态的,不是公共的,或者具有错误的返回类型.

这是我的源代码...如果我注释掉AwwaTransmissionInfo类,文件的其余部分编译得很好,所以我知道它不是编译器在第一个错误之后死亡的那个.而且我知道,我知道,这里有我想要做的内置内容,但只是假设我实际上知道我在做什么并跳过内置序列化器有一个原因:)

    public interface IXmlSerializable {
    //if this interface is implemented, the object can be serialized to XML
    string toXML();
    IXmlSerializable fromXML(XmlDocumentFragment inXml);
}

public class AwwaTransmissionInfo : IXmlSerializable {

    public DateTime DateTime = DateTime.Now;
    public int ItemCount;

    public string toXML() {
        throw new Exception("The method or operation is not implemented.");
    }

    public AwwaTransmissionInfo fromXML(XmlDocumentFragment inXml) {
        throw new Exception("The method or operation is not implemented.");
    }

}

public class CEmail {
    public string Email = "";

    public string toXML() {
        throw new System.Exception("The method or operation is not implemented.");
    }

    public CEmail fromXML(XmlDocumentFragment inXml) {
        throw new System.Exception("The method or operation is not implemented.");
    }
}

recursive.. 10

问题是方法签名必须与接口完全匹配.

最简单的解决方案是改变

    public AwwaTransmissionInfo fromXML(XmlDocumentFragment inXml) {

    public IXmlSerializable fromXML(XmlDocumentFragment inXml) {

如果您对此不满意,可以显式实现该接口.添加这个:

    public IXmlSerializable IXmlSerializable.fromXML(XmlDocumentFragment inXml) {
        return this.fromXML(inXml);
    }

然后,您将有两个fromXML()定义,一个用于作为类实例调用时使用,另一个用于通过接口调用时使用.



1> recursive..:

问题是方法签名必须与接口完全匹配.

最简单的解决方案是改变

    public AwwaTransmissionInfo fromXML(XmlDocumentFragment inXml) {

    public IXmlSerializable fromXML(XmlDocumentFragment inXml) {

如果您对此不满意,可以显式实现该接口.添加这个:

    public IXmlSerializable IXmlSerializable.fromXML(XmlDocumentFragment inXml) {
        return this.fromXML(inXml);
    }

然后,您将有两个fromXML()定义,一个用于作为类实例调用时使用,另一个用于通过接口调用时使用.

推荐阅读
小色米虫_524
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有