2018年9月28日.NET筆記試験の面接問題

3740 ワード

インタフェースと抽象クラスの取捨選択方法
に答える
インタフェースと抽象クラスは非常に似ており、どちらもインスタンス化できず、実装されていない部分は派生クラスによって実装されています.
インタフェースと抽象クラスの主な違いは以下の点です.
  • 抽象クラスはクラスのみを派生させ、インタフェースはクラスと構造を派生させることができる.
  • 抽象クラスの派生クラスは抽象クラスであってもよく、すなわち抽象メンバーが派生クラスで必ずしも完全に実現されるとは限らない.インタフェースでは、派生クラスまたは構造がメンバーを完全に実装する必要があります.
  • 抽象クラスは、自己実装されたメンバーを含むことができ、フィールドを含むことができ、インタフェースは未実装のメンバーのみを含み、フィールドを含むことができない.また、インタフェースおよび含まれるメンバーは、publicアクセスレベルである必要があります.
  • クラスは抽象クラスを1つしか継承できませんが、複数のインタフェースを継承(実装)できます.

  • 具体的なプログラム設計では,抽象クラスとインタフェースの取捨選択はプログラムの必要に応じて決まる.
  • 抽象クラスは、類似した共通の特性を持つクラスのセットをまとめ、これらのクラスの共通のメンバーを抽象クラスに抽出し、抽象クラスをこのクラスのベースクラスとするために使用することができる.
  • このようにコードの多重化を行い、コード量を節約するだけでなく、メンテナンスの複雑さも軽減し、その後、このクラスの類似の方法や属性を抽象クラスに抽出し、抽象クラスの抽象メンバーとなり、具体的な実現を提供せず、このクラス自身が異なる実現を完成する.

  • 説明:抽象クラスの応用はウェブページ作成中のCSS外部スタイルファイルと非常に類似しており、多くのスタイルが同じページでこのCSSファイルを共用することができ、ページで一部のCSS属性を書き換えることができる.
  • インタフェースはクラスの機能集合のセットであり、クラスの協定集合とも言える.このクラスはこれらの機能を実現する責任を負い、インタフェースに含まれるメンバーは抽象的であると言える.
  • クラスは、複数のインタフェースを実装することができ、これにより、意図と実装を分離することができ、インタフェースは他のプログラムに露出して直接使用することができ、機能の拡張を容易に行うことができる.

  • ぶんせき
  • 抽象クラスは、継承されるためにのみ使用されるabstractキーワードで修飾されたクラスである.インタフェースと同様に、抽象クラスはインスタンスを作成できません.クラスは、このような派生クラスを継承して実装される複数の実装されていない抽象メンバーを宣言できます.
  • 抽象クラスのクラスには、実装されていないメンバーが抽象メンバーである実装メンバーが含まれていてもよい.
  • 抽象メソッドまたは属性自体が暗黙的なvirtualであるため、派生クラス実装抽象メソッドまたは属性はoverrideキーワードを使用する必要がある.
  • 抽象クラスを継承するクラスは、抽象メンバーが完全に実装されていない場合、抽象クラスのみになります.すなわち、派生した非抽象クラスは抽象メンバーを完全に実装する必要があります.
  • 抽象クラスはインタフェースを実装することもでき、この場合抽象クラスはすべてのインタフェースメンバーを実装する必要があり、継承されたインタフェースメンバーを抽象メンバーにマッピングし、その派生クラスによって実装することもできる.

  • 説明:抽象クラスのメンバーは、virtaulまたはstaticで修飾できません.
    C#変数の暗黙型宣言の概要
    に答える
  • C#は、ローカル変数のデータ型を暗黙的に宣言するためのvarキーワードを提供し、コンパイラが初期値に基づいて特定のデータ型を推定します.
  • varが宣言する変数はローカル変数であり、メソッドまたは属性を宣言する変数宣言にのみ使用でき、宣言時にnull以外の初期値を変数に付与する必要があります.

  • ぶんせき
  • C#で変数を宣言する方法は他のプログラミング言語と同様で、一般的にそのデータ型を宣言し、変数の初期化を完了する必要があります.
  • C#には、データ型宣言の代わりにvarのキーワードが用意されており、コンパイラは変数に初期値を付与した後、データ型を判断し、初期化を完了します.
  • この方法は弱いタイプのプログラミング言語の変数宣言方法に少し似ている.

  • たとえば、JavaScriptなどの弱い言語で変数を宣言すると、異なるデータ型の値を役割ドメインに格納できます.C#は強いタイプの言語であり、varのキーワードを使っても質的な変化はないが、コンパイラがvarに遭遇した場合、初期値から対応するデータ型がその変数のタイプに設定されていると推測され、このデータ型とは異なる新しい値が役割ドメイン内に変数に与えられるとコンパイルエラーが発生する.
  • C#varキーワードはプログラミング者の変数宣言をある程度便利にしたが、プログラムの可読性、メンテナンス性のために、varキーワードは乱用すべきではない.

  • 支店のタイプと支店の方法について簡単に話します.
    に答える
  • 在.NETプログラム開発では,集積開発環境では大量のクラスのコードを自動的に生成することが多く,プログラミング者もそのクラスのコードを手書きで作成する.同じクラスのコードを分離するために、C#はpartialキーワードを提供し、同じタイプを複数のファイルに記述することができ、このタイプを分割タイプと呼ぶ.
  • C#では、partialキーワードを使用して支店メソッドを定義できます.その目的は支店タイプと似ていますが、支店メソッドには制限があります.

  • ぶんせき
  • C#は早くからpartialのキーワードを提供しており、中国語の意味は局所的で部分的であり、このキーワードは主に修飾タイプに用いられている.
  • プログラム開発では、タイプは一般的に1つのファイルに定義され、クラスの内容が多すぎると可読性、メンテナンス性に影響します.一方、partial修飾タイプ(すなわち、分割タイプ)は、複数のファイルに同じクラスのクラスを記述することを可能にし、コンパイル後に不可分なタイプになるだけである.
  • 支店タイプの出現は複雑なタイプを複数の部分に分離することができ、団体協力プロジェクトの利便性を極めて便利にし、同時に同じクラスで開発環境が自動的に生成したコードとユーザーが作成したコードを統合して別々に記憶するのに有利である.
  • C#には、修飾クラスのメソッドにpartia lキーワードを使用する分割メソッドも用意されています.

  • 分部メソッドの概念と分部タイプの概念には多くの類似点があるが,その特殊性があり,任意に定義することはできず,以下の制限に従う必要がある.
  • 分割法は、静的方法であってもよいが、暗黙的なプライベート方法であり、戻り値のない方法でなければならない.説明:分部メソッドはプライベートメソッドであるため、virtual修飾子は使用できません.すなわち、虚メソッドにはなりません.)
  • 分割メソッドは、メソッドを宣言部分と実装部分の2つの部分に分けるしかありません.
  • 分割メソッドは、分割タイプにのみ使用され、メソッドの宣言部分および実装部分は、分割タイプの異なる部分に位置することができる.
  • 分部法は、refパラメータを有することができるが、outパラメータを有することはできない.
  • は、委任を分割メソッドに変換することを許さない.