首页 > 解决方案 > 除了名称之外,我将如何处理两个完全相同的类?

问题描述

我正在使用 Core 3.1 编写服务。在我正在编写的服务中,我创建了一个连接到遗留 SOAP 服务的服务,该服务与更旧的系统交互。SOAP 服务提供基本的 CRUD 操作并使用类作为数据容器。问题是为服务引用生成的代码为partial具有完全相同属性的对象创建了单独的类。

public partial class REQUEST1
{
    public string PropertyName {get; set;}
}
public partial class REQUEST2
{
    public string PropertyName {get; set;}
}

我发现在准备请求对象方面我一遍又一遍地编写相同的代码。

private void SetProperties(MyClass parameters, REQUEST1 request)
{
    request.PropertyName = parameters.MyParamValue;
}
private void SetProperties(MyClass parameters, REQUEST2 request)
{
    request.PropertyName = parameters.MyParamValue;
}

我不想修改生成的代码,因为下次生成代码时必须记住要这样做。接口和基类并不是真正的选择,因为它正在修改生成的代码。因此,我正在寻找有关如何编写一种方法的建议,该方法可以采用其中一个类并设置值,而无需编写千篇一律的代码。

更新: 所以这变得更加复杂。在创建/更新服务中,我有复杂的对象。

public partial class ADDRESS
{
    // Address Properties created by the service reference
}

public partial class PERSON
{
    ADDRESS[] ADDRESSES { get; set;}
    // Other properties created by the service reference
}

我可以为地址和人员创建界面,但这会产生另一个问题。

public interface IAddress
{
    // Address properties 
}
public interface IPerson
{
    IAddress[] ADDRESSES {get;set;}
    // Other properties
}
public partial class ADDRESS : IAddress
{
}
public partial class PERSON : IPerson
{
}

这会产生一个错误,指出 PERSON 没有实现成员 IAddress[] ADDRESSES,因为它没有正确的返回类型。这是有道理的,但我不知道如何解决它。对于具有原始类型的单个对象,这种方法有效,但对于更复杂的类型,它似乎需要另一种解决方案。

标签: c#.net-coresoap-clientpartial-classesduck-typing

解决方案


我建议使用部分类向类添加接口。

public interface IRequest
{
   string PropertyName {get; set;}
}

public partial class REQUEST1
{
    public string PropertyName {get; set;}
}
public partial class REQUEST2
{
    public string PropertyName {get; set;}
}

public partial class REQUEST1 : IRequest
{
}

public partial class REQUEST2 : IRequest
{
}

你可以有这样的方法

private void SetProperties(MyClass parameters, IRequest request)
{
    request.PropertyName = parameters.MyParamValue;
}

推荐阅读