C#基于属性的条件

时间:2014-12-02 15:01:26

标签: c# object

我有以下课程

class ClassA : SuperClass { }
class ClassB : SuperClass { }
class ClassC : SuperClass { }
class SuperClass
{
    int Id { get; set; }
    string Property1 { get; set; }
    string Property2 { get; set; }
    List<string> Property3 { get; set; }
}

当满足条件时,我必须覆盖任何类(A,B,C)中的一个,两个或所有属性,我必须知道属性被覆盖以及哪些属性在哪里。 所以我创建了这个应该由SuperClass实现的接口。

public interface IOverride
{
    string OverrideProperty1 { get; set; }
    string OverrideProperty2 { get; set; }
    List<string> OrderedProperty3 { get; set; }
}

如何在不必为每个属性创建布尔值的情况下知道属性是否被覆盖。 或者我应该采取不同的方法?

修改

ClassA,ClassB和ClassC数据来自特定来源,对于每个对象,我从其他来源获取信息。如果新来源有值,我需要存储它们并覆盖原始值。

这样的东西
var dataList = GetClassesData() as List<SuperClass>;
var newData = GetNewData() as object[];

foreach (var data in dataList)
{
    if (newData.Contains(o => o.Id == data.Id))
    {
        data.Property1 = newData[Id].Property1;
        data.Property2 = newData[Id].Property2;
        data.Property3 = newData[Id].Property3;
    }
}

3 个答案:

答案 0 :(得分:2)

覆盖本身不是有条件的,可以是有条件的,是从重写类返回的属性的value

答案 1 :(得分:0)

这应该为你做。

if(typeof(ClassA).GetMethod("Property1").DeclaringType == typeof(SuperClass)){
     //This method was overridden
}

答案 2 :(得分:0)

如果我理解你正确编辑的问题,你可以这样说:

public interface IOverride
{
    string StandardProperty1 { get; set; }
    string StandardProperty2 { get; set; }
    List<string> StandardProperty3 { get; set; }

    string OverrideProperty1 { get; set; }
    string OverrideProperty2 { get; set; }
    List<string> OrderedProperty3 { get; set; }
}

class ClassA : SuperClass { }
class ClassB : SuperClass { }
class ClassC : SuperClass { }
class SuperClass : IOverrideProperty
{
    string StandardProperty1 { get; set; }
    string StandardProperty2 { get; set; }
    List<string> StandardProperty3 { get; set; }

    string OverrideProperty1 { get; set; }
    string OverrideProperty2 { get; set; }
    List<string> OrderedProperty3 { get; set; }

    string Property1 
    { 
        get
        {
            if (condition)
                return OverrideProperty1;
            else
                return StandardProperty1;
        } 
        set
        {
             if (condition)
                OverrideProperty1 = value;
            else
                StandardProperty1 = value;
        }

        //Same for Property2 and 3
}

您现在可以设置两个属性,您的条件将决定返回或设置一个属性。

相关问题