繁体   English   中英

我可以仅使用C#中的对象名称来访问对象属性吗?

[英]Can I access an object property just with the object name in C#?

我有一个简单的类,其中包含一些私有属性和2个公共属性(值和类型)。 我试图找到一种方法来调用对象,以便它无需调用obj.value即可返回其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中比

a.value = 45;

其中,a表示C#中的SmartNumeric对象。 该对象接收更新,这是我需要返回数据库以更新值并需要其他属性的地方。

是的,您可以重写MyClass中的ToString方法以返回所需属性的值,例如

public override string ToString()
{
    return this.value;
}

将此添加到您的班级后,最后一行将显示“ abc”

注意:这里发生的是,基本上,当您调用Console.WriteLine(<Something>) ,它将尝试调用类Object中的ToString()方法。 现在我们知道Object类是我们拥有的任何类的超类。 因此,我们重写ToString()方法,并返回要从类中返回的任何字符串。

您的最后一行必须类似于Console.WriteLine(obj.ToString())

希望这可以帮助!

最终的答案是它无法完成。 变量是变量,对象是对象。 试图摆脱它并作弊只会带来其他问题,而且我看不到如何将其他属性关联到变量而不将其作为对象。 因此,它必须是一个对象,并且将使用obj.value访问该值。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM