C# 同一成员变量的两个setter/getter
我在C#类中有一个私有成员变量,如下所示: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
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;
然而,即使您可以这样做,您最好不要这样做,只需声明两个名称不同的属性。不在。你会得到编译错误,他们必须有不同的名称。我没有尝试,因为它似乎不符合逻辑,不可能在得到时扣除类型。所以我在想办法让它成为可能。你们可以在这里和我看到的这里了解更多关于房产的信息。谢谢你的时间!