我在C#类中有私有成员变量,如下所示:
class foo{
private byte bar;
}
我想制作两个(或更多)setter / getter:
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;}
}
}
这可能吗?或任何其他等效模式?
答案 0 :(得分:4)
从技术上讲,您可以通过隐式运算符 模仿此类行为:
byte b = 123;
Random r = new Random();
int bitNumber = r.Next(32);
var bit = (b & (1 << bitNumber-1)) != 0;
现在,让我们玩得开心:
public struct Bar {
internal Bar(Byte value) {
Value = value;
}
internal Bar(String value) {
if (String.Equals(value, "Nothing", StringComparison.OrdinalIgnoreCase))
Value = 0;
else
Value = Byte.Parse(value);
}
public Byte Value {
get;
private set;
}
public override string ToString() {
return Value == 0 ? "Nothing" : Value.ToString();
}
public static implicit operator Byte (Bar value) {
return value.Value;
}
public static implicit operator String(Bar value) {
return value.ToString();
}
public static implicit operator Bar(Byte value) {
return new Bar(value);
}
public static implicit operator Bar(String value) {
return new Bar(value);
}
}
class Foo {
private Bar m_Bar;
public Bar Bar {
get {
return m_Bar;
}
set {
m_Bar = value;
}
}
}
但是,即使你可以这样做,你最好不做,只是声明两个不同名称的属性。
答案 1 :(得分:1)
不,那是不可能的。你可以做的最接近的事情可能是这样的:
<?php
namespace Illuminate\Support\Facades;
/**
* @see \Illuminate\Http\Request
*/
class Input extends Facade
{
/**
* Get an item from the input data.
*
* This method is used for all request verbs (GET, POST, PUT, and DELETE)
*
* @param string $key
* @param mixed $default
* @return mixed
*/
public static function get($key = null, $default = null)
{
return static::$app['request']->input($key, $default);
}
/**
* Get the registered name of the component.
*
* @return string
*/
protected static function getFacadeAccessor()
{
return 'request';
}
}
当然,此解决方案尚未完成,因为如果值不兼容,您可能会遇到尝试来回转换的错误(例如,将字符串&#34; hello&#34;转换为byte,或者将整数4,235转换为字节)。您最有可能希望通过适当的验证来制作这些方法,如果转换失败,可能会抛出异常。
答案 2 :(得分:1)