2016-10-25 6 views
-1

呼び出された関数の内部で変数を宣言することは可能ですか?外部のソースはこの変数を変更できませんか?例:C#関数の外で変更できない変数

private void SetVariable(){ 
    privatetypevariable variable = "hello"; 
} 

variable = "world"; //<-- doesnt work because it cannot access the variable 'variable' inside SetVariable() 

上記の方法の範囲外の変数にはどうすればアクセスできますか?

+4

いいえ、できません。変数は同じスコープとネストスコープでのみ表示されます。 – pwas

+0

メソッドの外部でローカル変数にアクセスすることはできません –

+3

スコープとカプセル化のような概念を正しく把握する必要があります – haim770

答えて

2

メソッドで変数を宣言する代わりに、クラスフィールドとして定義します。次に、クラス内のどこからでも変更できます。フィールドは一般的に非公開とマークされているため、クラス外で変更することはできません。クラスの外部に公開する場合は、パブリックタイプの代わりにプロパティを使用します。

private privatetype fielda; 
void methodA(){ 
    fielda = "hello"; 
} 

void someOtherMethod() 
{ 
    fielda = fielda + " world"; 
} 
0

それが原因変数は変数だけが失われた、とすぐにスコープを終了すると、その与えられた範囲内で暮らしているという事実のために可能ではないであろう。 メソッドに宣言された変数に可視性変更子を追加することはできません

sはmethodA()のスコープ内にのみ存在し、終了するとただちに失われるため、以下のコードは機能しませんスコープ。

private void methodA(){ 
    String s = "hello"; 
} 

private void methodB(){ 
    s = s + " world"; //even tho methodA created an s variable, it doesn't exist in the eyes of methodB 
} 

次のように何かをすることができます:

class someClass{ 
    private String s; 

    public someClass(){ 
     s = "hello world"; 
    } 

    public String getVariable(){ //you can read this variable, but you can't set it outside of this class. 
     return s; 
    } 

}

0

を使用すると、関数内の変数を指定した場合、それはC#でのみ、その関数にスコープされます。

例1:

private void foo(string bar) 
    { 
     string snark = "123"; 
    } 

    private void derk() 
    { 
     snark = "456"; 
    } 

例1は、コンパイルエラーが発生します。クラス内を意味する場合は、プロパティをreadonlyと宣言します。初期コンストラクタの外では変更できません。

例2:あなたはそれが最初のコンストラクタの外のクラスにreadonly属性に割り当てることはできませんので

public class Lassy 
    { 
     private readonly string _collarColour; 

     public Lassy(string collarColour) 
     { 
      _collarColour = collarColour; 
     } 

     private void SetCollarColour(string newColour) 
     { 
      _collarColour = newColour; 
     } 
    } 

例2も、コンパイルエラーが発生します。

希望するものを達成するには、readonlyを使用してください。

関連する問題