class (C# リファレンス)class (C# Reference)

クラスは、次の例に示すように、キーワード class を使用して宣言します。Classes are declared using the keyword class, as shown in the following example:

class TestClass
    // Methods, properties, fields, events, delegates
    // and nested classes go here.


C# では、単一継承のみを使用できます。Only single inheritance is allowed in C#. つまり、クラスは 1 つの基底クラスの実装だけを継承できます。In other words, a class can inherit implementation from one base class only. ただし、クラスは複数のインターフェイスを実装できます。However, a class can implement more than one interface. クラスの継承とインターフェイスの実装の例を次の表に示します。The following table shows examples of class inheritance and interface implementation:

継承Inheritance Example
なしNone class ClassA { }
SingleSingle class DerivedClass: BaseClass { }
なし。2 つのインターフェイスを実装None, implements two interfaces class ImplClass: IFace1, IFace2 { }
1 つ。1 つのインターフェイスを実装Single, implements one interface class ImplDerivedClass: BaseClass, IFace1 { }

名前空間内で直接宣言され、他のクラスに入れ子にされていないクラスは、public または internal のいずれかです。Classes that you declare directly within a namespace, not nested within other classes, can be either public or internal. クラスは既定で internal です。Classes are internal by default.

クラスのメンバー (入れ子にされているクラスを含む) は publicprotected internalprotectedinternalprivate、または private protected のいずれかとして宣言することができます。Class members, including nested classes, can be public, protected internal, protected, internal, private, or private protected. メンバーは既定で private です。Members are private by default.

詳細については、「アクセス修飾子」を参照してください。For more information, see Access Modifiers.

型パラメーターを持つジェネリック クラスを宣言することができます。You can declare generic classes that have type parameters. 詳細については、「ジェネリック クラス」を参照してください。For more information, see Generic Classes.

クラスには、次のメンバーの宣言を含めることができます。A class can contain declarations of the following members:


ここでは、クラスのフィールド、コンストラクター、メソッドの宣言例を示します。The following example demonstrates declaring class fields, constructors, and methods. また、オブジェクト インスタンスの作成とインスタンス データの出力の例も示します。It also demonstrates object instantiation and printing instance data. 次の例では、2 つのクラスが宣言されています。In this example, two classes are declared. 最初の Child クラスには、2 つのプライベート フィールド (nameage)、2 つのパブリック コンストラクター、および 1 つのパブリック メソッドがあります。The first class, Child, contains two private fields (name and age), two public constructors and one public method. 2 番目のクラスである StringTest は、Mainの格納に使用されます。The second class, StringTest, is used to contain Main.

class Child
    private int age;
    private string name;

    // Default constructor:
    public Child()
        name = "N/A";

    // Constructor:
    public Child(string name, int age)
    { = name;
        this.age = age;

    // Printing method:
    public void PrintChild()
        Console.WriteLine("{0}, {1} years old.", name, age);

class StringTest
    static void Main()
        // Create objects by using the new operator:
        Child child1 = new Child("Craig", 11);
        Child child2 = new Child("Sally", 10);

        // Create an object using the default constructor:
        Child child3 = new Child();

        // Display results:
        Console.Write("Child #1: ");
        Console.Write("Child #2: ");
        Console.Write("Child #3: ");
/* Output:
    Child #1: Craig, 11 years old.
    Child #2: Sally, 10 years old.
    Child #3: N/A, 0 years old.


前の例で、プライベート フィールド (name および age) にアクセスできるのは、Child クラスのパブリック メソッドだけであることに注意してください。Notice that in the previous example the private fields (name and age) can only be accessed through the public method of the Child class. たとえば、次のステートメントを使用して Main メソッドから子の名前を印刷することはできません。For example, you cannot print the child's name, from the Main method, using a statement like this:

Console.Write(;   // Error

Main から Childのプライベート メンバーへのアクセスは、Main がそのクラスのメンバーである場合にのみ可能です。Accessing private members of Child from Main would only be possible if Main were a member of the class.

アクセス修飾子を指定せずにクラス内で宣言された型は既定で private になります。そのため、キーワードが削除されてもこの例のデータ メンバーは private です。Types declared inside a class without an access modifier default to private, so the data members in this example would still be private if the keyword were removed.

最後に、既定のコンストラクターを使って作成したオブジェクト (child3) の age フィールドが、既定で 0 に初期化されていることに注意してください。Finally, notice that for the object created using the default constructor (child3), the age field was initialized to zero by default.

C# 言語仕様C# language specification

詳細については、「C# 言語の仕様」を参照してください。For more information, see the C# Language Specification. 言語仕様は、C# の構文と使用法に関する信頼性のある情報源です。The language specification is the definitive source for C# syntax and usage.

関連項目See also