簡體   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