連載:[完全版]究極のC#プログラミング

Chapter8 部分クラスと静的クラス

川俣 晶
2009/11/16

8.4 部分クラスを使ううえでの注意点

 部分クラスを使ううえでのいくつかの注意点を以下にまとめておく。

■属性

 個々の部分クラスに付いた属性は、すべてその型に付加されたものと見なされる。以下の2つのコードは等価である。

[a("part1")]
partial class A {}

[a("part2")]
partial class A {}

[a("part1"), a("part2")]
partial class A {}

 つまり、個々の部分に異なる属性を付けて区別するようなことはできない。

■修飾子

 public、protected、internal、privateのアクセス修飾子はすべての部分クラスで同じでなければならない。

 部分クラスの宣言の少なくとも1つにabstractが付いていれば、抽象クラスになる。

 部分クラスの宣言の少なくとも1つにsealedが付いていれば、シールクラスになる。

 特定の1つの部分クラスにunsafeが付いていれば、その部分クラスだけがunsafeコンテキストになる。

■型パラメータと制約

 ジェネリック型の型パラメータは、すべての部分クラスで同じ内容、順序、名前が指定されなければならない。

 制約(where句)は同じ内容が指定されていなければならないが、順番は問わない。

■基本クラス

 部分クラスの宣言が基本クラスの指定を含む場合、すべての部分クラスは同じ基本クラスの指定を含まなければならない。

■基本インターフェース

 部分クラスの宣言に付加された基本インターフェースの宣言は、すべて集められて、その型が実装するインターフェースと見なされる。ただし、同じインターフェースを複数指定した場合でも、インターフェースメンバーの実装は1つだけ行う。

■メンバー

 クラス内の複数の部分で同じメンバーを宣言することはできないが、partialな内部クラスは宣言できる。

■所属する名前空間

 1つの型の部分クラスは同じ名前空間に属する必要がある。

■名前のバインディング

 部分クラスごとに別のusingディレクティブが指定されると、部分クラスごとで同じ名前が、異なる意味を持つ場合がありうる。

 たとえば、以下の2つのコードでは、Aの持つ意味が異なるため、a1とa2は異なる型となる。

namespace N
{
  using A = System.String;
  partial class X
  {
    private A a1;
  }

}

namespace N
{
  using A = System.Text.StringBuilder;
  partial class X
  {
    private A a2;
  }
}


 INDEX
  [完全版]究極のC#プログラミング
  Chapter8 部分クラスと静的クラス
    1.8.1 部分クラス(Partial Class)
    2.8.2 自動生成コードと安全に共存する
    3.8.3 リフレクションと部分クラス
  4.8.4 部分クラスを使ううえでの注意点
    5.8.5 静的クラス(Static Class)/【Exercise】練習問題
 
インデックス・ページヘ  「[完全版]究極のC#プログラミング」


Insider.NET フォーラム 新着記事
  • 第2回 簡潔なコーディングのために (2017/7/26)
     ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている
  • 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
     Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう
  • 第1回 明瞭なコーディングのために (2017/7/19)
     C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える
  • Presentation Translator (2017/7/18)
     Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Insider.NET 記事ランキング

本日 月間