개체 지향 프로그래밍(C# 및 Visual Basic)
관리 되는 모든 언어로 Visual Basic 및 C#와 같은.NET Framework 완벽 하 게 지원 캡슐화, 상속 및 다형성 등의 개체 지향 프로그래밍을 제공 합니다.
캡슐화 관련 된 속성, 메서드 및 기타 멤버의 그룹을 하나의 단위나 개체로 취급 됩니다 것을 의미 합니다.
상속 기존 클래스를 기반으로 새로운 클래스를 만들 수 있는 기능을 설명 합니다.
다형성 동일한 속성 또는 메서드를 각각 다른 방식으로 구현 하도 여러 클래스를 서로 교체 하 여 사용할 수 있습니다 있을 수 있음을 의미 합니다.
이 섹션에서는 다음 개념을 설명합니다.
클래스 및 개체
클래스 멤버
속성 및 필드
메서드
생성자
소멸자
이벤트
중첩된 클래스
액세스 한정자 및 액세스 수준
클래스 인스턴스화
정적 (클래스와 멤버 공유)
익명 형식
상속
- 멤버를 재정의합니다.
인터페이스
제네릭
대리자
클래스 및 개체
계약 조건 클래스 하 고 개체 클래스 설명 바꿔서 있지만 실제로 사용 되는 경우도 있는 형식 개체를 사용할 수는 있지만 개체의 인스턴스 클래스를 사용 합니다.따라서 개체를 만드는 작업 이라고 인스턴스화.청사진에 비유를 사용 하 여 클래스는 청사진이 고 개체는 해당 청사진을 만든 빌딩입니다.
클래스를 정의 하려면:
Class SampleClass
End Class
class SampleClass
{
}
또한 Visual Basic 및 C# 라이브 버전의 클래스를 제공 구조 있는 유용한 다양 한 개체를 만든 후 실행 하는 경우는 너무 많은 메모리를 사용 합니다.
구조체를 정의 하려면:
Structure SampleStructure
End Structure
struct SampleStruct
{
}
자세한 내용은 참조 하십시오.
Visual Basic
C#
클래스 멤버
각 클래스는 서로 다른 있을 수 있습니다. 클래스 멤버 데이터 클래스, 클래스 동작을 정의 하는 메서드 및 서로 다른 클래스와 개체 간의 통신을 제공 하는 이벤트를 설명 하는 속성이 포함 됩니다.
속성 및 필드
필드 및 속성 개체를 포함 하는 정보를 나타냅니다.읽거나 직접 설정할 수 있기 때문에 필드는 변수와 같습니다.
필드를 정의 하려면:
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#에서 자동으로 구현 된 속성 읽기 전용 이나 쓰기 전용일 수 없습니다.
자세한 내용은 참조 하십시오.
Visual Basic
C#
메서드
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#도 지원 확장 메서드 클래스의 실제 정의 밖에 있는 기존 클래스에 메서드를 추가할 수 있도록 합니다.
자세한 내용은 참조 하십시오.
Visual Basic
C#
생성자
생성자에 지정 된 형식의 개체를 만들 때 자동으로 실행 되는 클래스 메서드입니다.생성자는 일반적으로 새 개체의 데이터 멤버를 초기화 합니다.생성자는 클래스가 만들어질 때 한 번에 실행할 수 있습니다.또한 생성자의 코드는 항상 클래스의 다른 코드 보다 먼저 실행 됩니다.그러나 다른 메서드와 마찬가지로 생성자 오버 로드를 여러 개 만들 수 있습니다.
클래스에 대 한 생성자를 정의 하려면:
Class SampleClass
Sub New(ByVal s As String)
// Add code here.
End Sub
End Class
public class SampleClass
{
public SampleClass()
{
// Add code here
}
}
자세한 내용은 참조 하십시오.
Visual Basic
C#
소멸자
소멸자는 클래스의 인스턴스를 소멸 하는 데 사용 됩니다..NET Framework 가비지 수집기 자동으로 할당 하 고 해제 하는 응용 프로그램에서 관리 되는 개체에 대 한 메모리를 관리합니다.그러나 응용 프로그램에서 만들어지는 관리 되지 않는 리소스를 정리 하는 소멸자를 계속 해야 수 있습니다.클래스에 대 한 소멸자는 하나만 사용할 수 있습니다.
소멸자 및.NET Framework 가비지 수집에 대 한 자세한 내용은 참조 하십시오. 가비지 수집.
이벤트
이벤트 클래스를 사용 하거나 다른 클래스에 게 알리기 위해 개체 또는 개체 특정 상황이 되 면 발생 합니다.클래스에 이벤트를 보냅니다 (또는 발생) 라고 합니다 게시자 이벤트 수신 (또는 처리) 하는 클래스 라고 하 고 구독자.이벤트에 대 한 자세한 내용은 어떻게 발생 되 고 처리를 참조 하십시오. 이벤트 처리 및 발생.
Visual Basic
이벤트를 선언 하려면 사용 하는 Event 문.
이벤트를 발생 시키는 사용 하는 RaiseEvent 문.
선언적 방식으로 이벤트 처리기를 지정 하는 WithEvents(Visual Basic) 문 고 Handles 절(Visual Basic) 절입니다.
동적으로 추가, 제거 및 이벤트와 연결 된 이벤트 처리기를 변경할 수 있도록 사용 하는 AddHandler 문 하 고 RemoveHandler 문 와 함께 합니다 AddressOf 연산자(Visual Basic).
C#
클래스에서 이벤트를 선언 하는 event(C# 참조) 키워드입니다.
이벤트를 발생 시키려면 이벤트 대리자를 호출 합니다.
이벤트에 등록 하 여 += 연산자. 이벤트를 구독 취소 하려면를 사용 합니다 -= 연산자입니다.
중첩된 클래스
다른 클래스 내에 정의 된 클래스 라고 중첩.중첩 된 클래스는 기본적으로 전용입니다.
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()
액세스 한정자 및 액세스 수준
모든 클래스 및 클래스 멤버를 사용 하 여 다른 클래스에는 제공할 액세스 수준을 지정할 수 있습니다. 액세스 한정자.
다음과 같은 액세스 한정자를 사용할 수 있습니다.
Visual Basic 한정자 |
C# 한정자 |
정의 |
---|---|---|
동일한 어셈블리 또는 참조 하는 다른 어셈블리의 다른 코드에서 형식 또는 멤버를 액세스할 수 있습니다. |
||
같은 클래스의 코드 에서만 형식이 나 멤버에 액세스할 수 있습니다. |
||
동일한 클래스 또는 파생된 클래스의 코드 에서만 형식이 나 멤버에 액세스할 수 있습니다. |
||
형식 또는 멤버를 있지만 다른 어셈블리는 동일한 어셈블리의 모든 코드에서 액세스할 수 있습니다. |
||
Protected Friend |
내부 보호 |
같은 어셈블리에 있는 코드 또는 다른 어셈블리에서의 파생 클래스 형식 또는 멤버에는 액세스할 수 있습니다. |
자세한 내용은 참조 하십시오. Visual Basic의 액세스 수준 하 고 액세스 한정자(C# 프로그래밍 가이드).
클래스 인스턴스화
개체를 만들려면 클래스를 인스턴스화하거나 클래스 인스턴스를 만들 필요 합니다.
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" };
자세한 내용은 참조 하십시오.
Visual Basic
C#
정적 (클래스와 멤버 공유)
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 모듈 정적 (공유) 멤버만 포함 하며 인스턴스화할 수 없습니다.비정적 (비공유) 속성, 필드 또는 메서드에 정적 (공유) 멤버에도 액세스할 수 없습니다.
자세한 내용은 참조 하십시오.
Visual Basic
C#
익명 형식
익명 형식을 사용 하면 데이터 형식에 대 한 클래스 정의 작성 하지 않고 개체를 만들 수 있습니다.대신 컴파일러가 클래스를 생성합니다.클래스 이름이 사용할 수 없는 및 개체를 선언할 때 지정 하는 속성을 포함 합니다.
익명 형식의 인스턴스를 만들려면:
' 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" };
자세한 내용은 참조 하십시오.
Visual Basic: 익명 형식(Visual Basic)
상속
상속을 다시 사용, 확장 및 다른 클래스에 정의 되는 동작을 수정 하는 새 클래스를 만들 수 있습니다.멤버는 상속 된 클래스에서 호출 되는 기본 클래스를 클릭 하 고 해당 멤버를 상속 하는 클래스 라고 합니다 파생된 클래스.그러나 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 { }
자세한 내용은 참조 하십시오.
Visual Basic
C#
멤버를 재정의합니다.
기본적으로 파생된 클래스 모든 구성원이 기본 클래스에서 상속합니다.상속 된 멤버의 동작을 변경 하려면 메서드를 재정의 해야 합니다.즉, 파생된 클래스에서 새로운 구현 메서드, 속성 또는 이벤트를 정의할 수 있습니다.
다음 한정자는 속성 및 메서드 재정의 제어 하려면 사용 됩니다.
Visual Basic 한정자 |
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.
}
}
자세한 내용은 참조 하십시오.
Visual Basic
C#
제네릭
클래스, 구조체, 인터페이스 및 메서드는.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");
}
}
자세한 내용은 참조 하십시오.
Visual Basic
C#