c#覆盖类中字段的方法

时间:2016-05-26 18:16:57

标签: 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();  // returns: "Employee ID is: {0}."
string s2 = inv.Id_record.ToString(); // returns original value as string

有可能吗?我知道我可以覆盖类的方法,但只适用于类中的字段......?

3 个答案:

答案 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);
    }
}

然后在您需要的地方使用它。