【发布时间】: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 类中将公共属性重定向到它。我不会这样做,但至少它会起作用。
-
在我的具体情况下,我想覆盖在另一个类中调用的属性的属性,而不会破坏逻辑并在应用程序的其余部分调用代码。
-
与问题无关:您确定一个人只会与一个地址相关吗? ;)
标签: c# properties overriding overloading dependency-properties