我有很多由 svcutil 从一些外部 WSDL 文件生成的类似类。任何类都有一个 Header
属性和一个名为 class name + "1"
的 string
属性。
例如,我有类:SimpleRequest
具有 Header
属性和 SimpleRequest1
属性。
另一个是 ComplexRequest
,它具有 Header
属性和 ComplexRequest1
属性。
所以,我想为这些类创建一个通用接口(interface)。所以,基本上我可以定义类似的东西:
interface ISomeRequestClass {
string Header;
// here is some definition for `class name + "1"` properties...
}
是否可以在接口(interface)中定义这样的成员?
这里是后期编辑......
这里是生成类的示例:
[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 属性的定义以表示真实的实际图片。它都有不同的类类型。那么如何将其拉出到通用接口(interface)呢?
后期编辑 3
这里是 coupled question这可以带来更多的澄清。
最佳答案
编辑(在看到您的代码示例之后):从技术上讲,您的代码没有Header
property,它有一个 header
字段。这是一个重要的区别,因为 you cannot specify fields in an interface .但是,使用下面描述的方法,您可以向返回字段值的类添加属性。
Is it possible to define such member in interface?
不,接口(interface)名称不能是动态的。无论如何,这样的接口(interface)不会很有用。如果您有类 ISomeRequestClass
的实例,您将使用什么名称来访问该属性?
但是,您可以使用显式接口(interface)实现:
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; }
}
}
关于c# - 不是按名称而是按类型指定接口(interface)成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10329750/