Overriding values c#
本文关键字:values Overriding | 更新日期: 2023-09-27 18:32:28
我有一个情况,我有 3 个classes
如下所示:
public class A
{
public int Id { get; set; }
public int BranchId { get; set; }
public int LocationId { get; set; }
public int DepID { get; set; }
public int Age { get; set; }
public string Name { get; set; }
}
public class B
{
public int LocationId { get; set; }
public int DepID { get; set; }
public int Age { get; set; }
public string Name { get; set; }
}
public class C
{
public int Age { get; set; }
public string Name { get; set; }
}
从上面的classes
我们看到,黑白 3 classes
的共同属性很少。
遇到一种情况,我必须通过组合 3 个classes
的值来创建最终输出,并在存在时覆盖它们,并在较低classes
中覆盖它们。
例如:-
考虑属性年龄,它是所有 3 classes
A
、B
和 C
但是如果它在 C
中的值不null
,而合并 class
C
中的值优先,所有属性都是这种情况。
我已经使用 Reflection
来实现了这一点,通过使用.GetType()
和.GetProperties()
方法从我拥有的所有 3 个classes
的实例中读取值,这些方法都是System.Reflection
库的一部分。
使用当前的Reflection based
方法,我将能够在任何classes
中处理任何属性的添加。
但我读到Reflection
性能不佳。
那么有没有更好的方法呢?
您需要查看继承。您的数据结构应如下所示:
public class C
{
public int Age { get; set; }
public string Name { get; set; }
}
public class B : C
{
public int LocationId { get; set; }
public int DepID { get; set; }
}
public class A : B
{
public int Id { get; set; }
public int BranchId { get; set; }
}
您只需创建正确类型的对象,每个对象都有其所需的属性,但不会获得重复的属性。
您可以使用继承将公共属性向下推送到基类,然后从它们派生以创建其他属性,例如:
public class A : B
{
public int Id { get; set; }
public int BranchId { get; set; }
}
public class B : C
{
public int LocationId { get; set; }
public int DepID { get; set; }
}
public class C
{
public int Age { get; set; }
public string Name { get; set; }
}
接口可用于标识属性组。此方法不会强制您更改已建立的类层次结构。
interface IData1
{
int Id { get;set; }
int BranchId { get;set; }
}
interface IData2
{
int LocationId { get;set; }
int DepID { get;set; }
}
interface IData3
{
int Age { get;set; }
string Name { get;set; }
}
public class A : IData1, IData2, IData3
{
public int Id { get;set; }
public int BranchId { get;set; }
public int LocationId { get;set; }
public int DepID { get;set; }
public int Age { get;set; }
public string Name { get;set; }
}
public class B : IData2, IData3
{
public int LocationId { get;set; }
public int DepID { get;set; }
public int Age { get;set; }
public string Name { get;set; }
}
public class C : IData3
{
public int Age { get;set; }
public string Name { get;set; }
}
void WriteData1(IData1 data){}
void WriteData2(IData2 data){}
void WriteData3(IData3 data){}
void WriteProperties(A a, B b, C c)
{
WriteData1(a);
WriteData2(a);
WriteData2(b);
WriteData3(a);
WriteData3(b);
WriteData3(c);
}