簡體   English   中英

在運行時獲取本地字段的值

[英]Getting the value of a local Field at run time

我對 c# 真的很陌生,我只想知道是否有可能在運行時獲取本地聲明字段的值? 例如說下面例子中的 ClassToTest 不能改變。

例子:

public class ClassToTest {
  public void func() {
    int number = 25;
  }
}

Public class MyProgram {
  public static void Main() {
    ClassToTest instance = new ClassToTest();
    instance.func();
    // Can field "number" value be extracted here?
  }
}

我一直在查看反射和其他與程序集相關的東西,但仍然沒有運氣。 任何建議將不勝感激。

這不是函數的工作方式。

public class ClassToTest {
  public int func() {
    return 25;
  }
}

Public class MyProgram {
  public static void Main() {
    ClassToTest instance = new ClassToTest();
    int number = instance.func();
  }
}

返回值的函數應具有一個返回類型(即int)和一個返回(即return 25;),然后當int number = instance.func();時; 運行后,func()方法將返回25並將其存儲到int number

沒有。

局部變量僅在您位於函數內部時存在。 退出函數后,局部變量消失在油膩的煙霧中。

您可以使用反射來訪問屬性(公共屬性和私有屬性)。

干杯,

亞當。

您無法訪問超出當前范圍的變量,無論是另一種方法,還是僅是另一種開關情況。 但是,沒有理由這樣做,您可以通過在方法中設置一個屬性來執行相同的操作:

public class ClassToTest {
    public int Number { get; private set; }
    public void func() {
        this.Number = 25;
    }
}

Public class MyProgram {
    public static void Main() {
        ClassToTest instance = new ClassToTest();
        instance.func();
        var i = instance.Number;
    }
}

我還將屬性的公共獲取器與私有設置器結合使用,從而可以從類內部而不是外部更改Number值。

其他人指出的另一種方法就是從func返回值。

這是不可能的,因為無法從外部范圍訪問在Body中聲明的內容。 意味着您的變量僅在func()-Method內部可用。 您可以做的是返回所需的值或聲明一個屬性。

public int Func()
{
  return 25;
}

public class MyProgram {
  public static void Main() {
    ClassToTest instance = new ClassToTest();
    int number = instance.func();
    //number will be 25
  }
}

使用屬性可以像這樣工作:

public class ClassToTest {

  public int Number{get{return 25;};private set;}
}

Public class MyProgram {
  public static void Main() {
    ClassToTest instance = new ClassToTest();
    int number = instance.Number;
  }
}

使用方法或屬性是您的決定。 但是您可以這樣認為:

“我的對象由什么組成”和“我的對象可以做什么”。

例如,一輛汽車有車輪。 因此,用屬性代表一個Wheel。 但是汽車可以移動,因此將移動實現為方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM