【发布时间】:2017-06-23 02:48:20
【问题描述】:
我有一个带有一些私有属性和 2 个公共属性(值和类型)的简单类。我试图找到一种调用对象的方法,以便它返回其值属性而不必调用 obj.value。我觉得不可能。
这是我的想法:
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 正在回调后端对象。如果我不必保留私有财产,这很容易,但我需要拥有它们。
更新: 为了更清楚:这个类将由 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 中比在 Javascript 中更自然
a.value = 45;
其中 a 指的是 C# 中的 SmartNumeric 对象。该对象收到更新,这是我需要返回数据库以更新值并需要其他属性的地方。
【问题讨论】:
-
为什么需要有这种行为?您很有可能采取了错误的方法来实现您需要实现的目标。
-
你所要求的没有意义。想想会有什么影响。这意味着您永远无法将
obj分配给另一个变量。例如var obj2 = obj;实际上会将obj.value分配给obj2。事实上,任何引用obj的表达式都会引用obj.value。所以你永远无法操纵obj。 -
我知道这没有意义,但我想知道是否某些 C# 向导可以想出访问器魔术之类的东西。解决此问题的最简单方法是创建一个简单对象(字符串),但要找到一种将其他值与其关联的方法。我不能只使用单独的数组来保留这些属性,因为当我访问对象时,我无权访问该数组...