我可以使用C#中的对象名称访问对象属性吗?
我有一个私人属性和2个公共属性(值和类型)的简单类。我试图找到一种方法来调用对象,以便它返回它的值属性,而不必调用obj.value。我不认为这是可能的。我可以使用C#中的对象名称访问对象属性吗?
这里是我的想法:
public class myclass {
private int property1;
private int property2;
public string value;
public string type;
public myclass(int property1, int property2, string value, string type)
{
this.property1 = property1;
this.property2 = property2;
this.value = value;
this.type = type;
}
}
var obj = new myclass(1, 2, "abc", "string");
console.write(obj.value); // returns abc
console.write(obj.type); // returns string
console.write(obj); // expecting abc
是否有办法在最后一行返回ABC这个语法?
你在问我为什么要实现这样的目标?我正在使用Javascript编程模块构建服务。这些对象是变量,我希望用户只需通过编写obj而不是obj.value来访问它们。我需要C#(而不是Javascript)的这种行为,因为Javascript正在回调后端对象。如果我不必保留那些容易的私人物业,但我需要拥有它们。
UPDATE: 为了更清楚:这个类是由JavaScript解释(Jint在这种情况下)被调用,而类有,如果它的价值被更新来更新数据库,所以需要私人财产。 这里是我的实际代码:
public class SmartNumeric : ISmartVariable
{
private Boolean _simulation;
private Guid UserId;
private long userKeyId;
private long variableKeyId;
private string Name;
public string type
{
get {
return "numeric";
}
}
private float _value;
public float value
{
get {
return _value;
}
set {
_value = value;
if (!_simulation)
new SmartCommon().SetValue(userKeyId, variableKeyId, value.ToString());
}
}
public SmartNumeric(Guid UserId, long userKeyId, long variableKeyId, string Name, float value, Boolean simulation)
{
this.Name = Name;
this._value = value;
this.UserId = UserId;
this.userKeyId = userKeyId;
this.variableKeyId = variableKeyId;
this._simulation = simulation;
}
}
因此,例如,用户会写自己的剧本就像
a = 45;
是在Javascript比
a.value = 45;
,其中一个是指更自然C#中的一个SmartNumeric对象。该对象接收更新,并且这是我需要返回到数据库以更新值并需要其他属性的位置。
最终答案是它不能完成。一个变量是一个变量,一个对象是一个对象。试图摆脱这一点,作弊只会带来其他问题,我看不出如何将其他属性关联到变量而不将其作为对象。所以它必须是一个对象,值将通过obj.value访问。
是的,您可以覆盖在MyClass的ToString方法来返回你想要的属性的值,如
public override string ToString()
{
return this.value;
}
有了这个添加到您的类,最后一行将打印你“ABC”
注意:这里发生的是,基本上当您调用Console.WriteLine(<Something>)
时,它会尝试调用类Object中存在的ToString()
方法。现在我们知道Object类是我们拥有的任何类的超类。因此,我们重写ToString()
方法,并返回我们想要从我们的类中返回的任何字符串。
您的最后一行必须是Console.WriteLine(obj.ToString())
之类的内容。
希望这有助于!
为什么你需要这种行为?你很可能会采取错误的做法来达到你需要达到的目标。 –
您要求的内容没有意义。想想会有什么影响。这意味着你永远无法将'obj'赋值给另一个变量。例如'var obj2 = obj;'实际上将'obj.value'赋值给'obj2'。实际上,任何引用'obj'的表达式都会引用'obj.value'。所以你永远无法操纵'obj'。 – RJM
我明白它没有意义,但我想知道如果一些C#向导可以拿出一个访问器魔术或什么的。解决这个问题的最简单的方法是创建一个简单的对象(一个字符串),但找到一种将其他值关联的方法。我不能只使用单独的数组来保留这些属性,因为当我访问该对象时,我无法访问此数组...... – pdube