Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
类中字段的c#重写方法_C# - Fatal编程技术网

类中字段的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
的隐式转换,但总的来说,这是一个非常好的主意