[英]What is the best practice to return a set of static data from 2 arrays
[英]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.