C# 同一成员变量的两个setter/getter

C# 同一成员变量的两个setter/getter,c#,properties,C#,Properties,我在C#类中有一个私有成员变量,如下所示: class foo{ private byte bar; } class foo{ private byte bar; public int Bar{ get{return (int)bar;} set{bar=(byte)bar;} } public string Bar{ get{return "Nothing";} set{bar

我在C#类中有一个私有成员变量,如下所示:

class foo{
    private byte bar;
}
class foo{
    private byte bar;

    public int Bar{
        get{return (int)bar;}
        set{bar=(byte)bar;}
    }    

    public string Bar{
        get{return "Nothing";}
        set{bar=0;}
    }
}
class foo
{
    private byte bar;

    public int BarAsInt
    {
        get { return Convert.ToInt32(bar); }
        set { bar = Convert.ToByte(value); }
    }

    public string BarAsString
    {
        get { return bar.ToString(); }
        set { bar = byte.Parse(value); }
    }
}
我想制作两个(或更多)setter/getter,如下所示:

class foo{
    private byte bar;
}
class foo{
    private byte bar;

    public int Bar{
        get{return (int)bar;}
        set{bar=(byte)bar;}
    }    

    public string Bar{
        get{return "Nothing";}
        set{bar=0;}
    }
}
class foo
{
    private byte bar;

    public int BarAsInt
    {
        get { return Convert.ToInt32(bar); }
        set { bar = Convert.ToByte(value); }
    }

    public string BarAsString
    {
        get { return bar.ToString(); }
        set { bar = byte.Parse(value); }
    }
}

这可能吗?或任何其他等效模式?

不,这是不可能的。你能做的最接近的事情可能是这样的:

class foo{
    private byte bar;
}
class foo{
    private byte bar;

    public int Bar{
        get{return (int)bar;}
        set{bar=(byte)bar;}
    }    

    public string Bar{
        get{return "Nothing";}
        set{bar=0;}
    }
}
class foo
{
    private byte bar;

    public int BarAsInt
    {
        get { return Convert.ToInt32(bar); }
        set { bar = Convert.ToByte(value); }
    }

    public string BarAsString
    {
        get { return bar.ToString(); }
        set { bar = byte.Parse(value); }
    }
}
当然,此解决方案并不完整,因为如果值不兼容(例如,将字符串“hello”转换为字节,或将整数4235转换为字节),在尝试来回转换时可能会遇到错误。您很可能希望使用适当的验证来生成这些方法,如果转换失败,可能会引发异常。

这在C中是不可能的,如下图所示:

你的程序甚至无法编译。因此,您需要为第二个属性赋予另一个名称。

从技术上讲,您可以通过隐式运算符模拟这种行为:

现在,让我们玩得开心:

  Foo foo = new Foo();

  foo.Bar = 123;
  foo.Bar = "Nothing";

  String test = foo.Bar;
  Byte testByte = foo.Bar;   

然而,即使您可以这样做,您最好不要这样做,只需声明两个名称不同的属性。

不在。你会得到编译错误,他们必须有不同的名称。我没有尝试,因为它似乎不符合逻辑,不可能在得到时扣除类型。所以我在想办法让它成为可能。你们可以在这里和我看到的这里了解更多关于房产的信息。谢谢你的时间!