如果主类中的属性设置为false,则使用主类中子类的值

时间:2016-06-15 08:26:38

标签: c# getter

子类并非来自主类,我只想尝试区分它们。

即使我输入此内容,我也可以看到它是不可能的,但我有一些课程:

public class TransferServiceInformation {
    public int ProviderId { get; set; }
    public string PrePurchaseOverride { get; set; }
    public bool PrePurchaseOverrideEnabled { get; set; }
}

public class TransferServiceProviderInformation {
    public int ProviderId { get; set; }
    public string PrePurchaseInfo { get; set; }

我希望如此,如果我尝试访问myTransferServiceInformation.PrePurchaseOverridePrePurchaseOverrideEnabled == false,我们应该从具有相同ID的PrePurchaseInfo返回TransferServiceProviderInformation

这样的事情是否可能?

我只是想到一个需要TransferServiceProviderInformation作为参数传递的getter可能会起作用,并且如果ID不匹配则抛出异常。这是唯一的解决方案吗?问题是,我宁愿不必挖掘所有(数千行)代码来改变我(或其他人)调用此属性的所有地方。

1 个答案:

答案 0 :(得分:1)

这只是一个想法:

使用类中的实例创建一个静态列表,并使用构造函数自动填充它。然后,您可以从外部检查具有相同ID的实例的此列表。

public class TransferServiceInformation
{
    public int ProviderId { get; set; }

    private string prePurchaseOverride;
    public string PrePurchaseOverride
    {
        get
        {
            if(!PrePurchaseOverrideEnabled)
            {
                // Get instances from the other class where providerID matches
                var instance = TransferServiceProviderInformation.Instances.Where(i => i.ProviderId == this.ProviderId).FirstOrDefault();
                if(instance != null)
                return (instance).PrePurchaseInfo;
            }
            return null; // If no match found
        }
        set
        {
            prePurchaseOverride = value;
        }
    }

    private bool prePurchaseOverrideEnabled;
    public bool PrePurchaseOverrideEnabled { get; set; }
}

public class TransferServiceProviderInformation
{
    // Store your instances static
    public static List<TransferServiceProviderInformation> Instances { get; set; }

    public TransferServiceProviderInformation()
    {
        // Add every new instance to the list
        Instances.Add(this);
    }

    public int ProviderId { get; set; }
    public string PrePurchaseInfo { get; set; }
}

要待办事项:

如果某个实例被处理掉,请从实例列表中删除它。