返回类实例 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()
如果可能,我如何实现这一目标。
谢谢
您可以创建另一个只读属性
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);