1)型インスタンスの作成時にコンストラクターが呼び出されない場合
私は2つのケースを知っています:オブジェクトをデシリアライズするときと、オブジェクトのMemberwiseCloneメソッドを使用してオブジェクトをコピーするとき
2) c#コンパイラは、クラスの前の静的修飾子(ILコード内)をどのように解釈しますか?
ILコードでは、次のようになります。
class public abstract auto ansi sealed beforefieldinit
。
さらに、コンパイラーはクラス内にコンストラクターメソッドも作成しません
3)フィールドとメソッドのどのアクセス修飾子はc#を実装しませんが、ILコードを実装しますか?
ファミリとアセンブリ -定義型(およびネストされた型)のメソッドおよび定義アセンブリの派生型でのみ使用可能
4) C#でUnionを宣言する方法を知っていますか(模倣)? つまり いくつかのフィールドをメモリ内の単一のオフセットから開始します。
[StructLayout(LayoutKind.Explicit)]
internal struct SomeValType {
[FieldOffset(O)] Byte b; // b
[FieldOffset(O)] Int16 x; // .
}
5)意味のある型(構造体)に対して、パラメーターなしでコンストラクターを定義できない(C#で)理由を疑問に思ったことはありませんか? これを回避することは可能ですか? :)
C#は、パラメータのないコンストラクターを意味のある型に定義することを許可しません。これにより、どのコンストラクターが呼び出されるか(すべてをゼロまたは私たちのもので初期化するコンストラクター)
ILでは、c#とは異なり、このようなコンストラクターを定義できます。 (それがどのように機能するかは別の質問です)
6)フィールドにタイプが定義されているコードをクライアントに提供した場合、クライアントはコードに基づいてコードを記述し、フィールドがプロパティに置き換えられた新しいバージョンのコードをクライアントに配信しました。
もちろん、まず第一に、すべてのメソッドはコンパイルを停止します。パラメータは、outまたはrefを持つフィールド(およびプロパティ)でした...さらに-
プロパティは読み取り専用にすることができます。
プロパティメソッドは例外につながる可能性があります
プロパティメソッドは時間がかかることがあります
連続して数回呼び出されると、プロパティは異なる値を返すことができます(4Ex.:DateTime.Now)
さらに、リフレクションを使用した場合、バインド中に例外も発生します。
7)すべてのイベントハンドラーはvoidを返す必要があります... MicrosoftはFCLライブラリの要件に従いますか? :))
実際、このような要件はイベントのメカニズムに組み込まれています。 これは必須です イベントが発生すると、いくつかのコールバックメソッドが機能し、それらから戻り値を取得することは不可能になります。
Microsoftは、いつものように、独自の方法で-推奨事項であってはなりません-例は、アセンブリタイプのオブジェクトを返すResolveEventHandlerイベントハンドラーです。 (証明リンク: tyts )
PS質問と回答はCLRによってC#を介して Jeffrey Richterが作成しました...