返回类实例 c# 的默认 ToString()

本文关键字:ToString 默认 实例 返回 | 更新日期: 2023-09-27 17:57:20

>我有一个名为 Person 的类

public class Person
    { 
      string name;
      int age;
      SampleObject(string name, int age)
      {
      this.name = name;
      this.age = age;
      }
      public override string ToString() 
      {
         string s = age.ToString();
         return "Person: " + name + " " + s;
      }
    }

我已经覆盖了 ToString() 以返回该人的姓名。

我在另一个类中使用该类:

public class MyClass
{
public int Id {get;set;}
public Person person {get;set;}
}

现在,我想访问该类

MyClass my = new MyClass();

我希望当我执行my.person时,它应该返回 person 类的 ToString() 值,而无需显式调用my.person.ToString()

是否可能,

如果可能,我如何实现这一目标。

谢谢

返回类实例 c# 的默认 ToString()

您可以创建另一个只读属性

public string PersonName { get {return this.person.ToString();} }

或添加检查可能的空

public string PersonName 
{
    get 
    {
        return (this.person == null) ? String.Empty : this.person.ToString();
    }
}

根据您对同一住宿
设置人员Name的评论我认为具有分离/特定属性的方法将更易于维护

public string PersonName 
{
    get 
    {
        return (this.person == null) ? String.Empty : this.person.ToString();
    }
    set
    {
        if(this.person == null)
        {
            this.person = new Person(value, 0);
        }
        else
        {
            this.person.Name = value;
        }
    }
}

我不太明白你的问题。 但是您的问题的解决方案之一是使用隐式强制转换。

    public class Person
    {
        string name;
        int age;
        public Person(string name, int age)
        {
            this.name = name;
            this.age = age;
        }
        public override string ToString()
        {
            string s = age.ToString();
            return "Person: " + name + " " + s;
        }
        // here
        public static implicit operator string(Person d)
        {
            return d.ToString();
        }
    }
    public class MyClass
    {
        public int Id { get; set; }
        public Person Person { get; set; }
    }
    static void Main(string[] args)
    {
        var myclass = new MyClass();
        myclass.Person = new Person("test", 12);
        // use like this
        string name = myclass.Person;
        Console.WriteLine(name);
        Console.WriteLine("Press any key to continue.");
        Console.ReadLine();
    }

您可以通过运算符重载来实现此目的。

public static implicit operator string(Person p)
{
    return p.ToString();
}

如果你愿意,你可以在MyClass中实现运算符重载,这样它也调用person。

public static implicit operator string(MyClass my)
{
    return my.person;
}

有了这个,你可以做一些类似的事情

string personString = my;
// or my.person if you only implement it for Person

此外,您不需要为年龄设置字符串变量。执行以下操作就可以了。

return "Person: " + name + " " + age;

我建议使用字符串。虽然格式。

return string.Format("Person: {0} {1}", name, age);