c# - 不是按名称而是按类型指定接口(interface)成员

标签 c# .net oop class interface

我有很多由 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/

相关文章:

c# - 当用户在 asp.net mvc3 中未被授权时重定向到另一个页面

c# - 无法在 Visual Studio 11 Developer Preview 中添加引用

.net - 检查 SSRS 报告自定义代码中的 Active Directory 组成员身份表

c# - 一个接口(interface)和一个只有虚拟抽象方法的抽象类是一回事吗?

c# - 在 C# 中导入 PowerShell 模块

c# - 将具有未知大小数组的结构从非托管代码传递到托管代码

c# - 为什么 ICollection 不包含 Add 方法?

c# - 如果我们稍后在读取时设置它,为什么要在 FileStream ctor 中设置 bufferSize?

Python OOP问题,一个类的值没有被另一个类的函数更新

Javascript OOP,从其他嵌套方法访问方法