我有以下课程:
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
有可能吗?我知道我可以覆盖类的方法,但只适用于类中的字段......?
答案 0 :(得分:9)
这样的事情对你有用吗?
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
答案 1 :(得分:2)
我认为这是不可能的,除非您想要创建自定义EmployeeID
类型,并覆盖ToString()
方法。
答案 2 :(得分:1)
您不是在类的属性上调用ToString()方法,而是调用该属性内的值。这意味着,您调用 Int32 类的ToString()。因此,您不能为单个属性覆盖ToString()方法。
您可以使用仅代表您的字段的getter创建自定义字段:
public string EmployeeIDTitle
{
get
{
return string.Format("Employee ID is: {0}.", EmployeeID);
}
}
然后在您需要的地方使用它。