簡體   English   中英

從靜態Main()獲取set訪問器 - 以及boolean store的最佳實踐

[英]get set accessors from static Main() - and best practice for boolean store

我無法充分解釋為什么來自static void Main(string [] args)的Console.WriteLine(val.getSetNum)返回0。

我原本以為在調用calc()之后,會設置int num嗎? 我知道我可以讓calc()返回所需的值,但實際上,我只是想要令人滿意地向對方解釋另一個。 直觀地說它看起來不太正確,因為它創建了一個不同的類實例......

更廣泛的問題是理解存儲各種類訪問的布爾控制變量的最佳方法......而不是將它們全部靜態化。 任何幫助贊賞。

public class Program
{
    private class Values
    {
        private int num;
        public int getSetNum  {get; set;}
    }

   public int calc()
    {
      Values vals = new Values();
      vals.getSetNum = 6;
      Console.WriteLine(vals.getSetNum);
      return vals.getSetNum;
    }

    static void Main(string[] args)
    {
        Program prog = new Program();
        Values val = new Values();
        prog.calc();                     //Outputs 6 
        Console.WriteLine(val.getSetNum);//Outputs 0 - why?
        Console.ReadKey();
    }
}

您正在創建兩個不同的Values實例 - 一個在Main ,一個為getSetNum保持其值為0,而一個在Calc ,其中getSetNum的值為6。 它們完全是獨立的實例。

你可以通過從calc返回Values引用來解決這個問題。 例如:

// TODO: Change *all* the names to be meaningful and comply with conventions
public int calc()
{
    Values vals = new Values();
    vals.getSetNum = 6;
    Console.WriteLine(vals.getSetNum);
    return vals;
}

static void Main(string[] args)
{
    Program prog = new Program();
    Values val = prog.calc();
    Console.WriteLine(val.getSetNum);
}

下一個:

更廣泛的問題是理解存儲各種類訪問的布爾控制變量的最佳方法

那么你需要所有這些類引用的實例。 沒有更多的信息,很難推薦任何特定的行動方案 - 但通常這種事情最好用依賴注入來處理。 但是,不要認為您需要將所有這些共享信息放在一個類中 - 您應該在邏輯上對其進行分區。 (同樣,如果沒有你想要做的具體例子,很難更具體。)

因為calc()和Main()方法都構造和訪問完全獨立的Values()對象。 鑒於Values是一個非靜態類,在任何給定的Values()實例和任何其他實例之間沒有任何關系,其中任何屬性也是如此。

如果您要在Program中保留私有值字段,如下所示:

private Values yourValues = new Values();
private class Values
{
...

您可以在所有方法中訪問和更改此Values實例,並且每次在類中的任何位置訪問時,都會反映對yourValues的getSetSum所做的更改。

val永遠不會設置為值,因此在Main函數中仍然保持默認值0 您需要為其分配一個值,如在calc中。

val.getSetNum = 6;

如果您希望calc指定一個值,您可以將值傳遞給它

public int calc(Values vals)
{
  vals.getSetNum = 6;
  Console.WriteLine(vals.getSetNum);
  return vals.getSetNum;
}

static void Main(string[] args)
{
    Program prog = new Program();
    Values val = new Values();
    prog.calc(val);                     //Outputs 6 
    Console.WriteLine(val.getSetNum); //Outputs 6 
    Console.ReadKey();
}

暫無
暫無

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

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