もっと詳しく
アクセス修飾子は、オブジェクト指向プログラミングでなくてはならないものです。 アクセス修飾子は、データメンバーおよびメンバー関数で使用することにより、データを保護するために使用されます。 これらのアクセス修飾子は、ソースごとに、パブリック、プライベート、保護、および内部です。 内部アクセス修飾子は、プライベートアクセスメンバーと同じように機能しますが、プログラミングのレベルが異なります。 プライベート修飾子はクラスレベルで機能し、内部修飾子はアセンブリレベルで機能します。 本日は、内部アクセス修飾子の使用について検討します。

例01

内部アクセス修飾子を使用する前に、まずC#プログラミングの「プライベート」アクセス修飾子を確認する必要があります。 そのため、2つのクラスを含む「New」という名前のユーザー定義の名前空間を使用しています。 クラス「Test」には、このコードの実行を開始するためのmain()関数が含まれています。 このmain()ドライバー関数のConsole.WriteLine()ステートメントは、画面に「テストクラスのメインメソッド」というテキストを表示するために使用されます。 クラス「New」のオブジェクト「obj」がクラス名を使用して作成されました。 クラス「New」には、値が「14」の整数型のプライベートデータメンバー「x」が含まれています。 これは、変数「x」の値は、たとえそれらが派生したとしても、他のクラスの他の関数からアクセスできないことを意味します。

main()関数は、Newクラスのオブジェクト「obj」を使用して、クラス「New」のプライベートデータメンバー「x」の値を更新しています。つまり、現在は不可能です。 main()メソッドのオブジェクト「obj」を使用してshow()関数を呼び出した後、「public」アクセス修飾子を使用してshow()メソッドを実行する必要があります。 「x」変数を持つプライベートアクセス修飾子があるため、そのようには見えません。 両方のクラスが完了し、コードを使用できるようになります。 最初にCtrl+Sで保存し、テキストエディタの十字記号を使用して閉じることでエディタを終了する必要があります。

コードを保存したら、Linuxですでに構成されている「mcs」C#コンパイラを使用してコードをコンパイルする必要があります。 この必須の手順は、C#コードの12行目でエラーが発生したことを示しています。つまり、プライベートアクセス修飾子で定義されたTestクラス内で変数「x」にアクセスできません。 したがって、このエラーを修正する必要があります。

テキストエディタでC#ファイルを再度開き、変数「x」のプライベートアクセス修飾子をパブリックアクセス修飾子に置き換えることでコードを更新しました。 残りのコードは不要なので変更しません。 そこで、新しく更新したコードをもう一度保存しました。

シェルでmcsコンパイラコマンドに続けてC#ファイルの名前を使用すると、コードは正常にコンパイルされました。 その後、シェルでC#のコンパイラによって作成された「exe」ファイルを実行し、出力が表示されました。つまり、「x」の値が更新されました。

例02

次に、内部アクセス修飾子を使用して、C#コードのクラスのいくつかの変数のスコープを定義する方法を見ていきます。 そのため、システムライブラリを追加してこのC#の例を開始し、その中に名前空間「New」を作成しました。 この名前空間には、「New」と「Test」という名前の2つの独立したクラスが含まれています。 クラス「Test」にはmain()ドライバーコード関数が含まれ、「New」クラスには整数変数「x」が含まれ、内部アクセス修飾子とshow()関数で定義された値は14です。 Newクラスオブジェクト「obj」は、「new」キーワードとそれに続くクラス名を使用して生成されています。 この新しいクラスオブジェクトは、次の行で「x」変数の値を「0」で更新するために使用されています。

これで、変数「x」が同じ名前空間アセンブリ「New」内の内部アクセス修飾子で定義されるため、変数「x」は正常に更新されます。 show()関数は、これと同じオブジェクト「obj」で呼び出されました。 show()関数が実行されると、Console.WriteLine()関数ステートメントを介してシェルに更新された「x」の値が表示されます。

Ctrl + Sを使用してコードファイルをすばやく保存し、再びターミナルに戻ります。 シェルで「internal.cs」ファイルを実行するために、C#コードコンパイル用の「mcs」コマンドを実行しています。 このコンパイルは成功し、internal.cs用にコンパイルされた「exe」ファイルが現在の作業ディレクトリに作成されました。 その「exe」ファイルを使用して、シェルの「mono」ランタイムコマンドで実行します。 出力は以下のように正常に表示されました。 main()関数は、表示された文字列に従って最初に実行され、その後、変数「x」の更新された値「0」が正常に表示されます。

これは、同じ名前空間内で使用された場合に、C#コードで内部アクセス修飾子がどのように機能するかを示しています。 コードに変更を加えて、内部アクセス修飾子が複数のアセンブリで使用された場合にC#コードの実行にどのように影響するかを確認しましょう。 同じC#コードで2つの名前空間、つまりNewとTestを作成しました。 New名前空間内に、クラスNewを作成し、内部アクセス修飾子の変数「x」を値14で初期化しました。同じクラスの名前空間Newには、「x」の値を表示するshow()関数が含まれています。

一方、名前空間Testには、main()関数を持つクラスTestが含まれています。 このmain()関数は、他の名前空間「New」からクラスNewのオブジェクトを作成しています。 同じオブジェクトを使用して変数「x」の値を変更し、show()関数を呼び出して変数「x」の更新された値を表示しました。 これで、オブジェクトが他の名前空間「Test」内で変数「x」にアクセスしようとしているときに、変数「x」が名前空間「New」で定義されます。 変数「x」を持つ内部アクセス修飾子が原因で、エラーが発生する場合があります。 今それを見てみましょう。

このコードをコンパイルした後、期待どおりにエラーが発生しました。つまり、タイプが保護されています。

コンパイル時にこのエラーを回避するには、上記のコードで最後のコードから行ったようにコードを更新する必要があります。 そのため、コードから「New」という名前空間を削除しましたが、以下に示すように、コードからTest名前空間を削除しませんでした。

この更新後のコードのコンパイルと実行後、コードは正常に実行され、内部タイプに関係なく、シェルに変数「x」の変更された値が表示されました。

結論

C#での内部アクセス修飾子の例の実装が完了しました。 この記事は、プライベートアクセス修飾子について説明し、内部アクセス修飾子と比較する例から始めました。どちらも、プログラミングのさまざまなレベルで同じ仕事をしているためです。 同じ名前空間、2つの異なる名前空間内で内部アクセス修飾子を使用しようとしましたが、クラス内で名前空間が定義されていません。 C#でデータメンバー変数と関数を保護するための使用法を詳しく説明しました。

The post C#内部 appeared first on Gamingsym Japan.