2017-09-12 17 views
-1
Main() 
    { 
    bool flag = false; 
    ClassA obj = new ClassA(out flag); 

    if(flag==true) 
    { 
     //do smething 
    } 
} 

ClassA 
{ 
    ClassA(out bool flag) 
    { 
     flag = false;  
    } 
    private void SomeClickEvent() 
    { 
     flag = true; 
    } 
} 

私はブール値をコンストラクタに渡しています。 SomeClickMethod()の値を設定する必要があります同じ値が出力パラメータとして返されますどのように私はできますか?同じクラスのメソッドにパラメータを設定する方法

+0

あなたが何を求めているのか分かりません。 'SomeClickMethod'はプライベートであり、呼び出されていません。 –

+0

上記のコードは単純に意味をなさないので、より明確にするために言い換えてください。 –

+0

どのように?任意の例があります – John

答えて

1

値の型は値渡しです。クラス内で参照を保持して別のメソッドで変更し、変更が外部に反映されていることを確認するには、プロパティを公開するか、または参照渡しするコンテナクラスを導入します。あなたが呼び出す

public class BoolContainer 
{ 
    public bool SomeValue { get; set; } 
} 

public class Foo 
{ 
    private BoolContainer _boolContainer; 

    public Foo(BoolContainer boolContainer) 
    { 
     _boolContainer = boolContainer; 
    } 

    public void Foo2() 
    { 
     _boolContainer.SomeValue = true; 
    } 
} 

:値を保持するために

bool flag = false; 
var obj = new Foo(flag); 
// ... 
flag = obj.SomeValue; 

をまたはコンテナを作成する:あなたはこのようにそれを呼び出す

public class Foo 
{ 
    public bool SomeValue { get; } 

    public Foo(bool someValue) 
    { 
     SomeValue = someValue; 
    } 

    public void Foo2() 
    { 
     SomeValue = true; 
    } 
} 

だからどちらかのプロパティを公開しますこのように:

var boolContainer = new BoolContainer(); 
var obj = new Foo(boolContainer); 
// ... 
bool flag = boolContainer.SomeValue; 

これで、呼び出し元はboolContainer.SomeValueにアクセスして値を検査(変更)できます。

+0

OPのFoo2の実装がプライベートであることを考えると、何とか2番目の例が好きですが、なぜ好きなのか説明できませんそれです。あなたの考えを分かち合う気遣い? – rene

+0

@rene私は本当に意図した目的が "旗"のものであると思っています。 – CodeCaster

1

新しいバージョンのC#で参照を返すことはできますが、それらは保存できません。クラス内のフィールドを参照にすることはできません。

public class ClassA 
{ 
    public bool flag{get; private set;} 

    private void SomeClickMethod() 
    { 
     flag = true; 
    } 
} 

または::

あなたがどれだけ意味と仮定すると、
public class ClassA 
{ 
    readonly Action<bool> setter; 

    public ClassA(Action<bool> setter) 
    { 
     this.setter = setter; 
     setter(false); 
    } 

    private void SomeClickMethod() 
    { 
     setter(true); 
    } 
} 

bool flag = false; 
ClassA obj = new ClassA(b => flag = b); 
1

クラスのフィールドにflag変数を回すか、コンストラクタにセッターラムダを渡す - あなたはこの問題を回避するには、いくつかのオプションがあります保存した値を返します(つまり、私はあなたのコードから理解するものだ)します

ClassA 
{ 
    bool flag1; 
    ClassA(bool flag) 
    { 
     flag1 = flag;  
    } 
    public bool SomeClickEvent() 
    { 
     return flag1; 
    } 
} 

をそしてそれを使用します。

ClassA a = new ClassA(true); 
bool b = a.SomeClickEvent();//returns true. 
+0

@reneありがとう!私はその部分を修正していませんでした。 – ispiro

関連する問題