我有以下课程
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;
}
}
答案 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
}
您现在可以设置两个属性,您的条件将决定返回或设置一个属性。