2

そのため、パラメーターを使用して作成したメソッドをテストしているときDataRowに、引数を送信してメソッド内で変更しました。その後、私のオリジナルDataRowは、メソッドの後にあるものに変更されました。DataRowこれは、私にとって新しい「参照型」であるためであることに気付きました。

メソッドを使用するときに、他のデータ型の前に「ref」または「out」を使用して、例と同じ効果が得られることがわかりましたDataRow。しかし、私の質問は、既定でどのデータ型が参照型であるかということです。別の種類のデータ型をメソッドに渡し、元の値が変更されたときに不意を突かれたくありません。

4

4 に答える 4

12

しかし、私の質問は、既定でどのデータ型が参照型であるかということです。

として定義されているものはすべてclass参照型であり、interfaceまたは デリゲートを参照する変数、または 宣言された変数ですdynamic。詳細については、参照型を参照してください。またはを渡さずに、メソッド内でクラスのメンバーを変更できます。そうは言っても、参照自体を変更することはできません。したがって、変数は、またはを介して渡さない限り、メソッド呼び出し後とメソッド呼び出し前とで常に同じインスタンスを指します。refoutoutref

の場合structは値型になります。

于 2012-08-17T16:41:44.653 に答える
1

より良い質問は、どの型が参照型ではないかということです。

MSDNドキュメント

  • 構造体
  • 列挙

構造体は次のカテゴリに分類されます。

  • 数値型:整数型、浮動小数点型、10進数
  • ブール
  • ユーザー定義の構造体
于 2012-08-17T16:47:25.273 に答える
0

c#のすべては、..から派生しています。そのため、intの場合でもObjectaやその他のメソッドが表示されます。toString()

->値型[それらを格納するために必要なメモリを占有します]

{プロセッサによって直接サポートされているため、プリミティブ型(10進数を除く)とも呼ばれます}

-> int、long、byte、flot、decimal..。

->ブール

-> char

->参照タイプ[参照とオブジェクトに別々のメモリを割り当てる必要があります]

->string

->object

->ジェネリック型パラメーター

-> T(例:TreeExample)

->ポインタタイプ

->安全でないコードとしてマーク

パラメータを渡すことができます

->による(値タイプの場合は正確なコピーが作成されます||参照タイプの場合は参照のみがコピーされます)

-> by ref(同じオブジェクトを参照)

-> by out(初期化されていないデータをパラメータとして渡すことができます&&はrefと同じです)

重要な事実

C#の引数は値でby default渡されます

于 2012-08-17T16:49:07.213 に答える
0

refと同じではoutありませんが、参照型です。実際、それらの意味は、使用するタイプによって異なります。

オンvalue type refキーワードは参考ですが、

Onreference type refキーワードは参照への参照です。

CLRデフォルトclassesではreference types、 ansはstructですvalue type

于 2012-08-17T16:42:58.373 に答える