2011-12-07 3 views
2

私は「YOU N000B」のコメントをたくさん得ようとしています。Cのリファレンスを保管しています。

私は、このクラスがあります。

public partial class FindAndReplace : Form 
{ 
    public FindAndReplace() 
    { 
     InitializeComponent(); 
    } 

    private void button1_Click(object sender, EventArgs e) 
    { 

    } 
} 

を、私は他の機能で使用するための参照を格納するために、このような何かを行うことができるようにしたい:

public partial class FindAndReplace : Form 
{ 
    SomeRefType m_TabRef; // Dont know what type to use 
    public FindAndReplace(ref TabControl launguageTabs) 
    { 
     InitializeComponent(); 
     m_TabRef = languageTab; 
    } 

    private void button1_Click(object sender, EventArgs e) 
    { 
     // use m_TabRef here that will change the original I passed in 
    } 
} 

一つの仕事は周りに使用することですTabControlのコピーを取得し、フラグを立てたい位置を返します。私はオリジナルを使うことができるかどうか疑問に思いました。

この投稿は人がGoogleでも役に立ちます。

これはCが、それは簡単だろう++れた場合:/

+0

まあは、C#がC++との電源機能の多くではありませんC++では、その言語を開発してデバッグするのがずっと難しくなっています。参照型はすでに参照されています。あなたは参照への参照を保存したいですか? –

+1

私は最初にC#を学んだときに「私のポインタはどこにありますか?」と思っていましたが、結局は本当にそこにいることを学んだので、アスタリスクを書く必要はありません。 – Philip

答えて

5

あなたは、単にそれを使用することができ、既に参照型のTabControl導入されたバージョン:

TabControl m_TabRef; 

public FindAndReplace(TabControl launguageTabs) 
{ 
    m_TabRef = languageTab; 

    // from now m_TabRef references the object instance 
    // passed as launguageTabs reference 
} 
3

をC#では、クラス参照型です。したがって、languageTabsはオブジェクトへのポインタのようなものであり、オブジェクト自体ではありません。そのため、あなたはこれを書くことができます。これは、値型であるC#でstructの異なる

public partial class FindAndReplace : Form 
{ 
    TabControl m_TabRef; // use TabControl 
    public FindAndReplace(TabControl launguageTabs) 
    { 
     InitializeComponent(); 
     m_TabRef = languageTab; 
    } 
} 

。値の型はデフォルトで値渡しされ、refキーワードがどこに来るのですか。本当に何が分かっているのか分からない限り、refキーワードは使わないでください。ほとんどの場合、あなたはそれを必要としません。

2

あなたはクラスのrefメンバーを持つことはできません。 refは、関数パラメータ修飾子としてのみ有効です。

また、参照型の概念(refを通して公開されている)と参照型の概念(参照型であるクラスを通して公開されている)とを混同している可能性が非常に高いです。

恐らく、refが存在することを忘れてしまい、そのような参照をコードからすべて削除すると、意図したとおりに動作します。そうでない場合は、達成しようとしていることをより具体的にしてください。

関連する問題