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# 重载在类中找到的对象的属性的主要内容,如果未能解决你的问题,请参考以下文章

Python面向对象之运算符重载

即使我重载了`operator<<`,也不能在类中使用`cout`

重载与重写的区别

php面向对象

C# 类型运算符重载在类继承中的调用测试

1.28 Java基础总结 ①方法重载②构造方法