連載「.NET TIPS」 メソッドに引数を渡す方法に、値渡しと参照渡しがある。さらにC#では、メソッドの引数リストで参照渡しを宣言するために、in/out/refの3通りのパラメーター修飾子がある。inパラメーター修飾子はC# 7.2の新機能だ。本稿では、この参照渡しのin/out/refの使い方の違いを解説する。
![in/out/refパラメーター修飾子の違いとは?[C#]](https://cdn-ak-scissors.b.st-hatena.com/image/square/6154b3877a59c70971f6bc97c5c7cbe484f2b45d/height=288;version=1;width=512/https%3A%2F%2Fimage.itmedia.co.jp%2Fait%2Farticles%2F1804%2F25%2Fl_dt-02.gif)
このブラウザーはサポートされなくなりました。 Microsoft Edge にアップグレードすると、最新の機能、セキュリティ更新プログラム、およびテクニカル サポートを利用できます。 既定では、C# の引数は値渡しで関数に渡されます。 つまり、変数のコピーがメソッドに渡されます。 値 (struct) の型の場合、値のコピーがメソッドに渡されます。 参照 (class) 型の場合、参照のコピーがメソッドに渡されます。 パラメーター修飾子を使用すると、引数を参照渡しできます。 次の概念は、これらの区別とパラメーター修飾子の使用方法を理解するのに役立ちます。 "値渡し" は、メソッドに変数のコピーを渡すことを意味します。 "参照渡し" は、メソッドに変数へのアクセスを渡すことを意味します。 "参照型" の変数には、そのデータへの参照が格納されます。 "値の型" の変数には、そのデータが直接格納
public: static System::IO::Stream ^ OpenStandardInput(); [System.Runtime.Versioning.UnsupportedOSPlatform("browser")] public static System.IO.Stream OpenStandardInput (); [System.Runtime.Versioning.UnsupportedOSPlatform("browser")] [System.Runtime.Versioning.UnsupportedOSPlatform("android")] [System.Runtime.Versioning.UnsupportedOSPlatform("ios")] [System.Runtime.Versioning.UnsupportedOSPlatform("
重要 一部の情報は、リリース前に大きく変更される可能性があるプレリリースされた製品に関するものです。 Microsoft は、ここに記載されている情報について、明示または黙示を問わず、一切保証しません。 public: static property System::IO::TextWriter ^ Error { System::IO::TextWriter ^ get(); }; public static System.IO.TextWriter Error { get; } member this.Error : System.IO.TextWriter Public Shared ReadOnly Property Error As TextWriter プロパティ値 TextWriter 標準エラー出力ストリームを表す TextWriter オブジェクト。 例 次の例は、Exp
コードスタイルの言語規則は、.NET プログラミング言語のさまざまなコンストラクト (修飾子、かっこなど) の使用方法に影響します。 このカテゴリには、不要なコード規則は、不要でリファクタリングまたは削除することができるコード ベースのさまざまな部分を特定します。 不要なコードが存在する場合は、次の問題の 1 つ以上が存在することを示しています。 読みやすさ: 読みやすさを不必要に低下させるコード。 保守容易性: リファクタリング後に使用されなくなり、不必要に維持されるコード。 パフォーマンス: 副作用がなく、不要なパフォーマンスのオーバーヘッドが発生する不要な計算。 機能: コードの冗長なレンダリングが必要となるコードの機能の問題。 たとえば、IDE0060 は、メソッドで誤って入力パラメーターを無視した場合に、未使用のパラメーターにフラグを設定します。 この規則は次のカテゴリに分けられ
スレッド安全性 パブリック静的メソッドはスレッドセーフですが、インスタンス・メソッドではスレッド安全性は保証されません。 例 // C# using System; using System.Data; using Oracle.DataAccess.Client; class OracleConnectionSample { static void Main() { // Connect string constr = "User Id=scott;Password=tiger;Data Source=oracle"; OracleConnection con = new OracleConnection(constr); con.Open(); // Execute a SQL SELECT OracleCommand cmd = con.CreateCommand(); cmd.Co
重要 一部の情報は、リリース前に大きく変更される可能性があるプレリリースされた製品に関するものです。 Microsoft は、ここに記載されている情報について、明示または黙示を問わず、一切保証しません。 最近のネットワークで使用されている多くのプロトコル用の単純なプログラミング インターフェイスを提供します。 System.Net 名前空間のクラスは Windows ストア スタイルのアプリケーションまたはデスクトップ アプリケーションで使用できます。 Windows ストア アプリで使用する場合、System.Net 名前空間のクラスはネットワークの分離機能の影響を受けます。この機能は、Windows Developer Preview によって使用されるアプリケーション セキュリティ モデルの一部です。 Windows ストア アプリによるネットワーク アクセスがシステムで許可されるよ
dynamic 型は静的な型ですが、dynamic 型のオブジェクトは静的な型チェックをバイパスします。 ほとんどの場合、object 型を使用する場合と同様に機能します。 コンパイラは、dynamic 要素がすべての操作をサポートしていることを前提としています。 したがって、オブジェクトが COM API、IronPython などの動的言語、HTML ドキュメント オブジェクト モデル (DOM)、リフレクション、プログラムの他の場所のいずれから値を取得するのかを決定する必要はありません。 ただし、コードが無効な場合には、実行時にエラーが発生します。 たとえば、次のコードの exampleMethod1 インスタンス メソッドにパラメーターが 1 つしかない場合、ec.exampleMethod1(10, 4) メソッドへの最初の呼び出しは引数を 2 つ含むため、コンパイラはこの呼び出
概要 継承(inheritance)とはオブジェクト指向の中核を担う概念で、 あるクラスから性質を受け継いだ新しいクラスを作ることです。 継承は派生(derivation)とも呼ばれます。 ポイント オブジェクト指向の中核概念その2: 継承。 「人間」⊃「学生」のように、包含関係のあるものを表現する方法。 「学生は人間を継承する」、「学生は人間から派生する」などと言う。 class Person { ... } に対して、class Student : Person { ... } と書く。 継承関係とは 継承関係の例として、「人間」と「学生」という2つのクラスについて考えて見ましょう。 「学生」は「人間」の一部です。 すなわち、「学生」ならば必ず「人間」としての特徴を備えています。 それとは逆に「人間」だからといって必ずしも「学生」であるとはいえません。 つまり、「学生」は「人間」の特別
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く