0

私はちょっと混乱しているので、ここで私を助けてください..私はC#winformsプロジェクトにフォームがあり、この特定のフォームとすべての派生したものに対していくつかのタスクを実行することになっているいくつかのメソッドがあるので、それらのヘルパーメソッドの1つが例を作成してください..これはコンボボックスをデータセットで埋める必要があります。現在は正常に動作していますが、この署名でメソッドをコーディングしたとき

protected void FillComboBox(kComboBox target, IEntClass_DA entity)
        {
            target.DataSource = entity.GetList().Tables[0];
            target.DisplayMember = "name";
            target.ValueMember = "id";
        }

メソッド呼び出し後、コンボボックスの displayMember と ValueMember が値を保持していないことがわかりました。割り当てが読み取り専用の参照変数で無駄にならないように、ref パラメーターを使用する必要があると考えました。

それまでは問題ありませんでしたが、後でフォーム全体をパラメーターとして渡す練習をすると、コンパイラーから、これは読み取り専用であるため ref パラメーターとして渡すことができないという警告が表示されました。それでは、作業を続けて、ref キーワードがなくても、フォームから ref 変数を使用して、いくつかのプロパティを更新し、変更を確認できることを確認します。

ここで何が起こっているのですか? コントロールの参照をヘルパー メソッドに渡すと、ref パラメーターを使用していない場合でも、そのメンバーを変更できますか??

ありがとう。

4

2 に答える 2

6

あなたの最後の声明は完全に正しいです。コントロールへの参照を渡しています。参照を介してそのコントロールの内容を変更できますが、パラメーターの値を変更して別のコントロール全体を参照すると、その変更は呼び出し元のコードに反映されません。

このよく誤解されている領域の詳細については、パラメーターの受け渡しに関する私の記事を参照してください。

于 2010-03-25T20:43:52.690 に答える
2

参照型を渡しているので、ref を使用するかどうかに関係なく同じ結果になるはずです...

于 2010-03-25T20:46:52.153 に答える