C# 重载在类中找到的对象的属性
Posted
技术标签:
【中文标题】C# 重载在类中找到的对象的属性【英文标题】:C# overloading a property of an object found in a class 【发布时间】:2021-12-27 09:01:15 【问题描述】:我想知道是否有一种方法可以在不重载类的情况下覆盖类中的属性。
例如,使用新的 C# 版本,我想知道是否可以通过任何方式覆盖 Address 类中的属性 Street。我想在被调用的类 Person 中添加一些 Street 属性的数据注释。
public class Address
[Display(Name = "Street")]
public string Street get; set;
public string City get; set;
public class Person
public string Firstname get; set;
public string Lastname get; set;
public Address Address get; set;
[Display(Name="Street with street number")]
public new Address.Street get;set; // new or override or anything to access at the Street property in the called class
class Program
public Person Person get; set;
static void Main(string[] args)
var person = new Person() Firstname = "John", Lastname = "Doe" ;
person.Address = new Address() Street = "2 mainstreet" , City = "Chicago";
Console.WriteLine($"person.Firstname person.Lastname - person.Address.Street, person.Address.City");
【问题讨论】:
这不是覆盖,与继承或多态无关。 我不知道上下文,但我认为如果你有这个需求,使用属性工具可能不是一个好主意。此外,对于使用示例,甚至没有使用这些属性。 ^^ 但是如果没有这个判断:你可以做的是使用 Adress 属性作为私有属性,并在 person 类中将公共属性重定向到它。我不会这样做,但至少它会起作用。 在我的具体情况下,我想覆盖在另一个类中调用的属性的属性,而不会破坏逻辑并在应用程序的其余部分调用代码。 与问题无关:您确定一个人只会与一个地址相关吗? ;) 【参考方案1】:我不知道您的情况下的继承用法,但您可以实现这一点 通过更改 getter/setter:
public class Person
public string Firstname get; set;
public string Lastname get; set;
public Address Address get; set;
[Display(Name="Street with street number")]
public string Street getreturn this.Address.Street;
setthis.Address.Street = value;
【讨论】:
这里有点吹毛求疵:这样,您可以通过Person.Street
和 Person.Address.Street
访问该属性,我不建议这样做。以上是关于C# 重载在类中找到的对象的属性的主要内容,如果未能解决你的问题,请参考以下文章