我有很多由svcutil从某些外部WSDL文件生成的类似类。任何类均具有Header
属性和名为string
的class 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; }
}
}