다음을 통해 공유


개체 지향 프로그래밍(C# 및 Visual Basic)

관리 되는 모든 언어로 Visual Basic 및 C#와 같은.NET Framework 완벽 하 게 지원 캡슐화, 상속 및 다형성 등의 개체 지향 프로그래밍을 제공 합니다.

캡슐화 관련 된 속성, 메서드 및 기타 멤버의 그룹을 하나의 단위나 개체로 취급 됩니다 것을 의미 합니다.

상속 기존 클래스를 기반으로 새로운 클래스를 만들 수 있는 기능을 설명 합니다.

다형성 동일한 속성 또는 메서드를 각각 다른 방식으로 구현 하도 여러 클래스를 서로 교체 하 여 사용할 수 있습니다 있을 수 있음을 의미 합니다.

이 섹션에서는 다음 개념을 설명합니다.

  • 클래스 및 개체

    • 클래스 멤버

      속성 및 필드

      메서드

      생성자

      소멸자

      이벤트

      중첩된 클래스

    • 액세스 한정자 및 액세스 수준

    • 클래스 인스턴스화

    • 정적 (클래스와 멤버 공유)

    • 익명 형식

  • 상속

    • 멤버를 재정의합니다.
  • 인터페이스

  • 제네릭

  • 대리자

클래스 및 개체

계약 조건 클래스 하 고 개체 클래스 설명 바꿔서 있지만 실제로 사용 되는 경우도 있는 형식 개체를 사용할 수는 있지만 개체의 인스턴스 클래스를 사용 합니다.따라서 개체를 만드는 작업 이라고 인스턴스화.청사진에 비유를 사용 하 여 클래스는 청사진이 고 개체는 해당 청사진을 만든 빌딩입니다.

클래스를 정의 하려면:

Class SampleClass
End Class
class SampleClass
{
}

또한 Visual Basic 및 C# 라이브 버전의 클래스를 제공 구조 있는 유용한 다양 한 개체를 만든 후 실행 하는 경우는 너무 많은 메모리를 사용 합니다.

구조체를 정의 하려면:

Structure SampleStructure
End Structure
struct SampleStruct
{
}

자세한 내용은 참조 하십시오.

Dd460654.collapse_all(ko-kr,VS.110).gif클래스 멤버

각 클래스는 서로 다른 있을 수 있습니다. 클래스 멤버 데이터 클래스, 클래스 동작을 정의 하는 메서드 및 서로 다른 클래스와 개체 간의 통신을 제공 하는 이벤트를 설명 하는 속성이 포함 됩니다.

Dd460654.collapse_all(ko-kr,VS.110).gif속성 및 필드

필드 및 속성 개체를 포함 하는 정보를 나타냅니다.읽거나 직접 설정할 수 있기 때문에 필드는 변수와 같습니다.

필드를 정의 하려면:

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

속성 get 및 set 프로시저가 값을 설정 하거나 반환 하는 방법에 대 한 더 많은 제어를 제공 합니다.

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#에서 생략할 수 있습니다 된 get 또는 설정 속성 메서드입니다.그러나 Visual Basic C#에서 자동으로 구현 된 속성 읽기 전용 이나 쓰기 전용일 수 없습니다.

자세한 내용은 참조 하십시오.

Dd460654.collapse_all(ko-kr,VS.110).gif메서드

A 메서드 개체에서 수행할 수 있는 작업이입니다.

[!참고]

Visual Basic에서는 두 가지 방법을 사용 하는 메서드를 만들려면. 는 Sub 문은 메서드 값을 반환 하지 않는 경우에 사용 됩니다. 는 함수 문은 메서드 값을 반환 하는 경우에 사용 됩니다.

클래스의 메서드를 정의.

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(ko-kr,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(ko-kr,VS.110).gif소멸자

소멸자는 클래스의 인스턴스를 소멸 하는 데 사용 됩니다..NET Framework 가비지 수집기 자동으로 할당 하 고 해제 하는 응용 프로그램에서 관리 되는 개체에 대 한 메모리를 관리합니다.그러나 응용 프로그램에서 만들어지는 관리 되지 않는 리소스를 정리 하는 소멸자를 계속 해야 수 있습니다.클래스에 대 한 소멸자는 하나만 사용할 수 있습니다.

소멸자 및.NET Framework 가비지 수집에 대 한 자세한 내용은 참조 하십시오. 가비지 수집.

Dd460654.collapse_all(ko-kr,VS.110).gif이벤트

이벤트 클래스를 사용 하거나 다른 클래스에 게 알리기 위해 개체 또는 개체 특정 상황이 되 면 발생 합니다.클래스에 이벤트를 보냅니다 (또는 발생) 라고 합니다 게시자 이벤트 수신 (또는 처리) 하는 클래스 라고 하 고 구독자.이벤트에 대 한 자세한 내용은 어떻게 발생 되 고 처리를 참조 하십시오. 이벤트 처리 및 발생.

Dd460654.collapse_all(ko-kr,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(ko-kr,VS.110).gif액세스 한정자 및 액세스 수준

모든 클래스 및 클래스 멤버를 사용 하 여 다른 클래스에는 제공할 액세스 수준을 지정할 수 있습니다. 액세스 한정자.

다음과 같은 액세스 한정자를 사용할 수 있습니다.

Visual Basic 한정자

C# 한정자

정의

Public(Visual Basic)

공개

동일한 어셈블리 또는 참조 하는 다른 어셈블리의 다른 코드에서 형식 또는 멤버를 액세스할 수 있습니다.

Private(Visual Basic)

개인

같은 클래스의 코드 에서만 형식이 나 멤버에 액세스할 수 있습니다.

Protected(Visual Basic)

보호

동일한 클래스 또는 파생된 클래스의 코드 에서만 형식이 나 멤버에 액세스할 수 있습니다.

Friend(Visual Basic)

내부

형식 또는 멤버를 있지만 다른 어셈블리는 동일한 어셈블리의 모든 코드에서 액세스할 수 있습니다.

Protected Friend

내부 보호

같은 어셈블리에 있는 코드 또는 다른 어셈블리에서의 파생 클래스 형식 또는 멤버에는 액세스할 수 있습니다.

자세한 내용은 참조 하십시오. Visual Basic의 액세스 수준 하 고 액세스 한정자(C# 프로그래밍 가이드).

Dd460654.collapse_all(ko-kr,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(ko-kr,VS.110).gif정적 (클래스와 멤버 공유)

Static (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(ko-kr,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 다중 상속을 지원 하지 않습니다 내가.e. 파생된 클래스에 대 한 기본 클래스를 하나만 지정할 수 있습니다.

기본 클래스에서 상속 하는 방법:

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(ko-kr,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 프로그래밍 가이드