我有很多由svcutil从某些外部WSDL文件生成的类似类。任何类均具有Header属性和名为stringclass name + "1"属性。

例如,我有一些类:具有SimpleRequest属性和Header属性的SimpleRequest1
另一个是具有ComplexRequest属性和Header属性的ComplexRequest1

因此,我想为此类创建一个通用接口。因此,基本上我可以定义如下内容:

interface ISomeRequestClass {
  string Header;
  // here is some definition for `class name + "1"` properties...
}


是否可以在接口中定义此类成员?



这是帖子编辑过程...

这是生成的类的示例:

[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "3.0.0.0")]
[System.ServiceModel.MessageContractAttribute(IsWrapped=false)]
public partial class SimpleRequest
{


    public string Header;

    [System.ServiceModel.MessageBodyMemberAttribute(Name="SimpleRequest", Namespace="data", Order=0)]
    public SimpleRequestMsg SimpleRequest1;

    public SimpleRequest()
    {
    }

    public SimpleRequest(string Header, SimpleRequestMsg SimpleRequest1)
    {
        this.Header = Header;
        this.SimpleRequest1 = SimpleRequest1;
    }
}




编辑后2

我更改了此烦人的+1属性的定义,以表示真实的实际图片。它们都有不同的类类型。那么如何将其拉出至通用界面?



编辑后3

这是coupled question,可能需要进一步阐明。

最佳答案

编辑(查看代码示例之后):从技术上来说,您的代码没有Header属性,它具有Header字段。这是重要的区别,因为you cannot specify fields in an interface。但是,使用下面介绍的方法,可以将属性添加到返回字段值的类中。




  是否可以在接口中定义此类成员?


否,接口名称不能是动态的。无论如何,这样的接口不是很有用。如果您有类ISomeRequestClass的实例,您将使用什么名称访问该属性?

但是,您可以使用显式接口实现:

interface ISomeRequestClass {
    string Header { get; set; }
    string ClassName1 { get; set; }
}

class SomeClass : ISomeRequestClass {
     string Header { ... }

     string SomeClass1 { ... }

     // new: explicit interface implementation
     string ISomeRequestClass.ClassName1 {
          get { return SomeClass1; }
          set { SomeClass1 = value; }
     }
}

08-04 14:43