【问题标题】:C# overloading a property of an object found in a classC# 重载在类中找到的对象的属性
【发布时间】: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


【解决方案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  { get{return this.Address.Street; }
                               set{this.Address.Street = value;} }
    }

【讨论】:

  • 这里有点吹毛求疵:这样,您可以通过Person.Street Person.Address.Street 访问该属性,我不建议这样做。
猜你喜欢
  • 2021-02-12
  • 2014-04-27
  • 2012-03-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多