类中字段的c#重写方法
我有以下课程:类中字段的c#重写方法,c#,C#,我有以下课程: public class Invoice { public int Id_record { get; private set; } public int EmployeeID { get; private set; } } 我想重写方法ToString(),但只覆盖字段“EmployeeID”。例如: Invoice inv = new Invoice(); string s1 = inv.EmployeeID.ToString
public class Invoice
{
public int Id_record { get; private set; }
public int EmployeeID { get; private set; }
}
我想重写方法ToString(),但只覆盖字段“EmployeeID”。例如:
Invoice inv = new Invoice();
string s1 = inv.EmployeeID.ToString(); // returns: "Employee ID is: {0}."
string s2 = inv.Id_record.ToString(); // returns original value as string
可能吗?我知道我可以重写类的方法,但只能重写类中的字段…?我认为这是不可能的,除非您想创建一个自定义的
EmployeeID
类型,并重写ToString()
方法。这对您有用吗
public class Invoice
{
public int Id_record { get; private set; }
public EmployeeID EmployeeID { get; private set; }
}
public struct EmployeeID
{
// as per Eric Lippert's suggestion
public EmployeeID(int id)
{
Value = id;
}
public int Value { get; private set; }
public override string ToString()
{
return $"Employee ID is: {Value}.";
}
// as per Scott Chamberlain's suggestion
public static implicit operator int(EmployeeID id)
{
return id.Value;
}
}
就像以前一样使用它:
Invoice inv = new Invoice();
string s1 = inv.EmployeeID.ToString(); // returns: "Employee ID is: {0}."
string s2 = inv.Id_record.ToString(); // returns original value as string
不是在类的属性上调用ToString()方法,而是在该属性内的值上调用。这意味着,调用Int32类的ToString()。因此,不能为单个属性重写ToString()方法
您可以使用getter创建自定义字段,该字段只表示您的字段:
public string EmployeeIDTitle
{
get
{
return string.Format("Employee ID is: {0}.", EmployeeID);
}
}
然后在需要的地方使用它。为了覆盖
int
的.ToString()
,需要有一个从int
继承的类。这似乎有点奇怪。。。整数还有什么其他的字符串表示法?没有新类型是不可能的,因为您不是重写类型的“实例”,而是重写该类型的实际实现。在这种情况下,您必须对int
进行重写,这需要对int进行子类化,这是不可能的,因为int是密封的。@David您不能从值类型继承。这是一个好主意,但我会将该值设置为构造函数中的只读属性集。可变结构是个坏主意。啊,我甚至读过你的博客文章,我忘了。。。谢谢你的好提示,你会考虑重载所有的算术运算符,这样你就可以制作<代码>值<代码>属性私有吗?@ BOTON.BOTOS不,我不认为它是值得的,主要是因为它是一个识别的领域,你可能不想要大多数<代码> int >代码>操作符,无论如何,我会添加一个到int
的隐式转换,但总的来说,这是一个非常好的主意