オブジェクト指向プログラミング (C# および Visual Basic)

すべてのマネージ言語では、Visual Basic や C# などの.NET Framework をフルのカプセル化、継承、およびポリモーフィズムなどのオブジェクト指向プログラミングをサポートします。

カプセル化 グループ関連のプロパティ、メソッド、およびその他のメンバーを扱われることを 1 つの単位またはオブジェクトとしてことを意味します。

継承 既存のクラスに基づいて新しいクラスを作成する機能について説明します。

ポリモーフィズム 各クラスと同じプロパティまたはメソッドをさまざまな方法で実装しても相互に使用できる複数のクラスを持つことができることを意味します。

ここでは、次の概念について説明します。

  • クラスとオブジェクト

    • クラスのメンバー

      プロパティとフィールド

      メソッド

      コンス トラクター

      デストラクター

      イベント

      入れ子になったクラス

    • アクセス修飾子とアクセス レベル

    • クラスのインスタンスを作成します。

    • クラスおよびメンバー静的 (共有)

    • 匿名型

  • 継承

    • メンバーをオーバーライドします。
  • インターフェイス

  • ジェネリック

  • 代理人

クラスとオブジェクト

条項 クラス し オブジェクト 同じ意味で、しかし実際には、クラスを記述する使用される、 種類 使用可能なオブジェクトがオブジェクト インスタンス クラスの。したがって、オブジェクトを作成する操作が呼び出される インスタンスの作成.青写真との類似性を使用して、クラスは設計図でありオブジェクトはその設計図を基にした建築物です。

クラスを定義するのには:

Class SampleClass
End Class
class SampleClass
{
}

Visual Basic および C# もと呼ばれるクラスのライト バージョンを提供します。 構造体 便利なオブジェクトの大きな配列を作成し、実行する必要がある場合は大量のメモリを消費しません。

構造体を定義するのには:

Structure SampleStructure
End Structure
struct SampleStruct
{
}

詳細についてを参照してください。

Dd460654.collapse_all(ja-jp,VS.110).gifクラスのメンバー

各クラスを別に持つことができます。 クラスのメンバー データのクラス、クラスの動作を定義する方法およびさまざまなクラスとオブジェクト間の通信を提供するイベントを記述するプロパティが含まれます。

Dd460654.collapse_all(ja-jp,VS.110).gifプロパティとフィールド

フィールドとプロパティは、オブジェクトが含まれている情報を表します。読み取りまたはを直接設定するためのフィールドは変数と似ています。

フィールドを定義するのには:

Class SampleClass
    Public SampleField As String
End Class
Class SampleClass
{
    public string sampleField;
}

プロパティは、get があり、設定の手順では、値の設定または返される方法をより詳細に制御を提供します。

C# および Visual Basic のプロパティの値を格納するプライベート フィールドを作成するか、このフィールドが自動的にバック グラウンドを作成し、プロパティ プロシージャの基本的なロジックを提供すると呼ばれる自動実装するプロパティを使用できます。

自動実装プロパティを定義するのには:

Class SampleClass
    Public Property SampleProperty as String
End Class
class SampleClass
{
    public int SampleProperty { get; set; }
}

読み取り/書き込みのプロパティ値の追加の操作を実行する必要がある場合は、プロパティの値を格納するフィールドを定義してを格納および取得の基本的なロジックを提供します。

Class Samplelass
    Private m_Sample As String
    Public Property Sample() As String
        Get
            ' Return the value stored in the field.
            Return m_Sample
        End Get
        Set(ByVal Value As String)
            ' Store the value in the field.
            m_Sample = Value
        End Set
    End Property
End Class
class SampleClass
{
    private int _sample;
    public int Sample
    {
        // Return the value stored in a field.
        get { return _sample; }
        // Store the value in the field.
        set { _sample = value; }
    }
}

ほとんどのプロパティは、メソッドまたはプロシージャを設定およびプロパティの値を取得するがあります。ただし、読み取り専用、または書き込み専用のプロパティを変更または読み取りを制限するを作成できます。Visual Basic では、使用することができます。 読み取り専用 し WriteOnly キーワードです。C# では省略することができます、 取得します。 または 設定 プロパティのメソッドです。ただし、Visual Basic と C# の両方を自動実装するプロパティ読み取り専用、または書き込み専用です。

詳細についてを参照してください。

Dd460654.collapse_all(ja-jp,VS.110).gifメソッド

A メソッド オブジェクトが実行できるアクションです。

[!メモ]

Visual Basic では、メソッドを作成するのには、2 つの方法があります。 を サブ ステートメントは、メソッドに戻り値を持たない場合に使用されます。 を 関数 ステートメントは、メソッドが値を返す場合に使用されます。

クラスのメソッドを定義するのには:

Class SampleClass
    Public Function SampleFunc(ByVal SampleParam As String)
        ' Add code here
    End Function
End Class
class SampleClass
{
    public int sampleMethod(string sampleParam)
    {
        // Insert code here
    }
}

クラスは複数の実装を持つことができますか オーバー ロード、同じメソッド内のパラメーターまたはパラメーターの型の数が異なる。

メソッドをオーバー ロードするのには:

Overloads Sub Display(ByVal theChar As Char)
    ' Add code that displays Char data.
End Sub
Overloads Sub Display(ByVal theInteger As Integer)
    ' Add code that displays Integer data.
End Sub
public int sampleMethod(string sampleParam) {};
public int sampleMethod(int sampleParam) {}

ほとんどの場合、クラス定義内でメソッドを宣言します。ただし、Visual Basic および C# もサポートします。 拡張メソッド 既存のクラスの実際のクラス定義の外部にメソッドを追加できます。

詳細についてを参照してください。

Dd460654.collapse_all(ja-jp,VS.110).gifコンス トラクター

コンス トラクターを指定された型のオブジェクトが作成されたときに自動的に実行されるクラス メソッドです。コンス トラクターは、通常、新しいオブジェクトのデータ メンバーを初期化します。コンス トラクターは、クラスが作成されたときのみとに実行できます。さらに、コンス トラクター内のコードは、常に他のコードでは、クラスの前に実行します。ただし、他のメソッドと同じように、複数のコンス トラクターのオーバー ロードを作成できます。

クラスのコンス トラクターを定義するのには:

Class SampleClass
    Sub New(ByVal s As String)
        // Add code here.
    End Sub
End Class
public class SampleClass
{
    public SampleClass()
    {
        // Add code here
    }
}

詳細についてを参照してください。

Dd460654.collapse_all(ja-jp,VS.110).gifデストラクター

デストラクターは、クラスのインスタンスを消滅させるために使用されます。.NET Framework では、ガベージ コレクターは自動的に割り当てと、アプリケーション内のマネージ オブジェクトのメモリの解放を管理します。ただし、アプリケーションで作成されるアンマネージ リソースをクリーンアップするデストラクターはまだ必要があります。1 つだけのデストラクターは、クラスすることができます。

デストラクターと、.NET Framework でのガベージ コレクションの詳細についてを参照してください。 ガベージ コレクション.

Dd460654.collapse_all(ja-jp,VS.110).gifイベント

クラスのイベントを有効にするまたは他のクラスに通知するオブジェクトまたはオブジェクトを関連する何かをするときに発生します。送信 (または発生)、イベント クラスと呼ばれます、 発行元 クリックしてが表示されます (処理) イベントをクラスと呼ばれます サブスクライバー.イベントの詳細については、どのように発生するの処理を参照してください。 イベントの処理と発生.

Dd460654.collapse_all(ja-jp,VS.110).gif入れ子になったクラス

別のクラス内で定義されているクラスと呼ばれます 入れ子になった.既定では、入れ子になったクラスはプライベートです。

Class Container
    Class Nested
    ' Add code here.
    End Class
End Class
class Container
{
    class Nested
    {
        // Add code here.
    }
}

入れ子になったクラスのインスタンスを作成するのには、クラスの名前に続けて、ドットと、続けて、入れ子になったクラスの名前のコンテナーを使用します。

Dim nestedInstance As Container.Nested = New Container.Nested()
Container.Nested nestedInstance = new Container.Nested()

Dd460654.collapse_all(ja-jp,VS.110).gifアクセス修飾子とアクセス レベル

すべてのクラスとクラス メンバーを使用して、他のクラスに提供するアクセスのレベルを指定することができます。 アクセス修飾子.

次のアクセス修飾子を使用できます。

Visual Basic の修飾子

C# の修飾子

定義

Public (Visual Basic)

パブリック

この型またはメンバーが同じアセンブリまたはそれが参照する別のアセンブリ内の他のコードによってアクセスできます。

Private (Visual Basic)

プライベート

この型またはメンバーは、同じクラス内のコードによってアクセスできます。

Protected (Visual Basic)

保護されています。

この型またはメンバーは、同じクラスまたは派生クラスのコードによってアクセスできます。

Friend (Visual Basic)

内部

この型またはメンバー、同じアセンブリが別のアセンブリからのコードがアクセスできます。

プロテクト フレンド

protected internal

この型またはメンバーには、同じアセンブリ内のコードによって、または、別のアセンブリ内の派生クラスでアクセスできます。

詳細についてを参照してください。 Visual Basic でのアクセス レベルアクセス修飾子 (C# プログラミング ガイド).

Dd460654.collapse_all(ja-jp,VS.110).gifクラスのインスタンスを作成します。

オブジェクトを作成するのには、クラスのインスタンスを作成または、クラスのインスタンスを作成する必要があります。

Dim sampleObject as New SampleClass()
SampleClass sampleObject = new SampleClass();

クラスをインスタンス化した後、インスタンスのプロパティやフィールドに値を代入してクラスのメソッドを呼び出すことができます。

' Set a property value.
sampleObject.SampleProperty = "Sample String"
' Call a method.
sampleObject.SampleMethod()
// Set a property value.
sampleObject.sampleProperty = "Sample String";
// Call a method.
sampleObject.sampleMethod();

クラスのインスタンスの作成プロセス中にプロパティに値を代入するのには、オブジェクト初期化子を使用します。

Dim sampleObject = New SampleClass With 
    {.FirstProperty = "A", .SecondProperty = "B"}
// Set a property value.
SampleClass sampleObject = new SampleClass 
    { FirstProperty = "A", SecondProperty = "B" };

詳細についてを参照してください。

Dd460654.collapse_all(ja-jp,VS.110).gifクラスおよびメンバー静的 (共有)

クラスの静的 (共有で Visual Basic) メンバーは、プロパティ、プロシージャ、または、クラスのすべてのインスタンスで共有されるフィールドです。

静的 (共有) メンバーを定義するのには:

Class SampleClass
    Public Shared SampleString As String = "Sample String"
End Class
static class SampleClass
{
    public static string SampleString = "Sample String";
}

静的 (共有) メンバーにアクセスするのには、このクラスのオブジェクトを作成しなくても、クラスの名前を使用します。

MsgBox(SampleClass.SampleString)
Console.WriteLine(SampleClass.SampleString);

静的 (共有) クラスでは、C# および Visual Basic でモジュール静的 (共有) メンバーだけがあるしをインスタンス化することはできません。静的 (共有) メンバーは非静的 (非共有) プロパティ、フィールド、またはメソッドにもアクセスすることはできません。

詳細についてを参照してください。

Dd460654.collapse_all(ja-jp,VS.110).gif匿名型

匿名型は、クラス定義のデータ型を記述することがなく、オブジェクトを作成できます。代わりに、コンパイラはクラスが生成されます。クラスでは、使用できる名前はありませんされ、オブジェクトの宣言で指定したプロパティが含まれています。

匿名型のインスタンスを作成するのには:

' sampleObject is an instance of a simple anonymous type.
Dim sampleObject = 
    New With {Key .FirstProperty = "A", .SecondProperty = "B"}
// sampleObject is an instance of a simple anonymous type.
var sampleObject = 
    new { FirstProperty = "A", SecondProperty = "B" };

詳細についてを参照してください。

継承

継承は、再利用、拡張、別のクラスで定義されている動作を変更する新しいクラスを作成することができます。メンバーが継承されるクラスと呼ばれます、 基本クラス、およびそれらのメンバーを継承するクラスと呼ばれます、 派生クラス.ただし、C# と Visual Basic の両方ですべてのクラスを暗黙的に継承します。 Object .NET クラスの階層構造をサポートし、すべてのクラスの低レベルのサービスを提供するクラスです。

[!メモ]

マネージ言語では、.NET Framework の複数の継承をサポートしていない私は.電子.、派生クラスの基本クラスを 1 つだけを指定できます。

基本クラスから継承するのには:

Class DerivedClass
    Inherits BaseClass
End Class
class DerivedClass:BaseClass{}

既定では、すべてのクラスは継承できます。ただし、クラスを基本クラスとして使用する必要がありますください、または基本クラスとしてだけ使用できるクラスを作成かどうかを指定することができます。

クラスを基本クラスとして使用できないことを指定します。

NotInheritable Class SampleClass
End Class
public sealed class A { }

クラスを基本クラスとしてだけ使用でき、インスタンス化できないことを指定します。

MustInherit Class BaseClass
End Class
public abstract class B { }

詳細についてを参照してください。

Dd460654.collapse_all(ja-jp,VS.110).gifメンバーをオーバーライドします。

既定では、派生クラスのすべてのメンバーは、基本クラスから継承します。継承されたメンバーの動作を変更する場合は、この関数をオーバーライドする必要があります。つまり、派生クラスでメソッド、プロパティ、またはイベントの新しい実装を定義できます。

次の修飾子は、プロパティとメソッドのオーバーライド方法を制御する使用されます。

Visual Basic の修飾子

C# の修飾子

定義

Overridable (Visual Basic)

virtual (C# リファレンス)

クラスのメンバーは、派生クラスでオーバーライドすることができます。

Overrides (Visual Basic)

override (C# リファレンス)

基本クラスで定義されている仮想 (オーバーライド) メンバーを上書きします。

NotOverridable (Visual Basic)

サポートされていません。

メンバーは、継承したクラスでオーバーライドされるようにします。

MustOverride (Visual Basic)

abstract (C# リファレンス)

いる必要がありますクラスのメンバーに、派生クラスでオーバーライドします。

Shadows (Visual Basic)

new 修飾子 (C# リファレンス)

基本クラスから継承されたメンバーを非表示にします。

インターフェイス

インターフェイス、クラスなど一連のプロパティ、メソッド、およびイベントを定義します。クラスとは異なり、インターフェイス実装を提供しません。クラスでは、実装されて、クラス別のエンティティとして定義されています。ちょうどそれのように定義されているインターフェイスを実装するクラスはそのインターフェイスのすべての側面を実装する必要があるで、契約をインターフェイスを表します。

インターフェイスを定義するのには:

Public Interface ISampleInterface
    Sub DoSomething()
End Interface
interface ISampleInterface
{
    void doSomething();
}

クラスにインターフェイスを実装するのには:

Class SampleClass
    Implements ISampleInterface
    Sub doSomething
        ' Method implementation.
    End Sub
End Class
class SampleClass : ISampleInterface
{
    void ISampleInterface.SampleMethod()
    {
        // Method implementation.
    }
}

詳細についてを参照してください。

ジェネリック

クラス、構造体、インターフェイス、およびメソッドが.NET Framework ですることができます。 型パラメーター 格納または使用できるオブジェクトの種類を定義します。ジェネリックの最も一般的な例は、コレクションのコレクションを格納するオブジェクトの種類を指定することができますです。

ジェネリック クラスを定義するのには:

Class SampleGeneric(Of T)
    Public Field As T
End Class
Public class SampleGeneric<T> 
{
    public T Field;
}

ジェネリック クラスのインスタンスを作成するのには:

Dim sampleObject As New SampleGeneric(Of String)
sampleObject.Field = "Sample string"
SampleGeneric<string> sampleObject = new SampleGeneric<string>();
sampleObject.Field = "Sample string";

詳細についてを参照してください。

代理人

A デリゲート メソッドのシグネチャを定義する型で、互換性のあるシグネチャで任意のメソッドへの参照を提供できます。呼び出す呼び出しは、デリゲートによってメソッドまたはすることができます。デリゲートは、メソッドを引数として他のメソッドに渡すに使用されます。

[!メモ]

イベント ハンドラーは、デリゲートを介して呼び出されるメソッドにすぎません。イベント処理にデリゲートの使用の詳細についてを参照してください。 イベントとデリゲート.

デリゲートを作成するのには:

Delegate Sub SampleDelegate(ByVal str As String)
public delegate void SampleDelegate(string str);

代理人が指定されたシグネチャと一致するメソッドへの参照を作成するのには

Class SampleClass
    ' Method that matches the SampleDelegate signature.
    Sub SampleSub(ByVal str As String)
        ' Add code here.
    End Sub
    ' Method that instantiates the delegate.
    Sub SampleDelegateSub()
        Dim sd As SampleDelegate = AddressOf SampleSub
        sd("Sample string")
    End Sub
End Class
class SampleClass
{
    // Method that matches the SampleDelegate signature.
    public static void sampleMethod(string message)
    {
        // Add code here.
    }
    // Method that instantiates the delegate.
    void SampleDelegate()
    {
        SampleDelegate sd = sampleMethod;
        sd("Sample string");
    }
}

詳細についてを参照してください。

参照

概念

C# プログラミング ガイド

その他の技術情報

Visual Basic のプログラミング ガイド