C# Basic Series 5(구조 함수)
9065 단어 구조 함수
이 절은 주로 실례 구조 함수, 사유 구조 함수와 정적 구조 함수를 배운다.
구조 함수의 역할:
1. 하나의 클래스가 new 실례화 대상에 있을 때 구조 함수를 호출하여 초기화 대상을 할 수 있다.
2. 파라미터가 없는 구조 함수를'기본 구조 함수'라고 한다.언제든지 new 연산자 실례화 대상을 사용하고 new에 매개 변수를 제공하지 않으면 기본 구조 함수를 호출합니다.클래스가 static 이외에 C# 컴파일러는 클래스를 실례화할 수 있도록 클래스가 없는 클래스에 공통된 기본 구조 함수를 제공합니다.
3. 구조 함수를 사유 구조 함수로 설정하면 클래스가 실례화되는 것을 막을 수 있다.
4. 구조 유형의 구조 함수는 클래스의 구조 함수와 유사하지만 structs는 현식 기본 구조 함수를 포함할 수 없습니다. 왜냐하면 컴파일러가 자동으로 구조 함수를 제공하기 때문입니다.이 구조 함수는 struct의 모든 필드를 기본값으로 초기화합니다.struct가 new 실례화될 때만 이 기본 구조 함수를 호출합니다.
실례 구조 함수
new 표현식으로 어떤 종류의 대상을 만들 때, 실례 구조 함수를 사용하여 모든 실례 구성원 변수를 만들고 초기화합니다.정적 클래스나 비정적 클래스의 정적 변수를 초기화하려면 정적 구조 함수를 정의해야 합니다.
class CoOrds
{
public int x, y;
// constructor
public CoOrds()
{
x = 0;
y = 0;
}
}
이 인스턴스 구조 함수는 CoOrds 클래스 기반 객체를 작성할 때마다 호출됩니다.이와 같은 매개 변수가 없는 구조 함수를'기본 구조 함수'라고 부른다.그러나 다른 구조 함수를 제공하는 것은 통상적으로 매우 유용하다.예를 들어, 데이터 멤버의 초기 값을 지정할 수 있도록 CoOrds 클래스에 구조 함수를 추가할 수 있습니다.
public CoOrds(int x, int y)
{
this.x = x;
this.y = y;
}
이렇게 하면 다음과 같이 기본값 또는 특정 초기값으로 CoOrd 객체를 만들 수 있습니다.
CoOrds p1 = new CoOrds();
CoOrds p2 = new CoOrds(5, 3);
클래스에 구조 함수가 없으면 자동으로 기본 구조 함수를 생성하고 대상 필드를 초기화하는 기본값을 사용합니다.
실례 구조 함수로도 기류의 실례 구조 함수를 호출할 수 있다.클래스 구조 함수는 다음과 같이 초기 값 설정 항목을 통해 베이스 클래스의 구조 함수를 호출할 수 있습니다.
abstract class Shape
{
public const double pi = Math.PI;
protected double x, y;
public Shape(double x, double y)
{
this.x = x;
this.y = y;
}
public abstract double Area();
}
class Circle : Shape
{
public Circle(double radius)
: base(radius, 0)
{
}
public override double Area()
{
return pi * x * x;
}
}
이 예에서 Circle 클래스는 반지름과 높이를 나타내는 값을 Shape(Circle에서 파생된 것)에서 제공하는 구조 함수에 전달합니다.
사유 구조 함수
사유 구조 함수는 특수한 실례 구조 함수다.그것은 보통 정적 구성원만 포함하는 클래스에 사용된다.만약 클래스가 하나 이상의 사유 구조 함수를 가지고 있고 공공 구조 함수가 없다면 다른 클래스 (플러그인 클래스를 제외하고) 는 이 클래스의 실례를 만들 수 없습니다.예를 들면 다음과 같습니다.
class NLog
{
// Private Constructor:
private NLog() { }
public static double e = Math.E; //2.71828...
}
성명공 구조 함수는 기본 구조 함수를 자동으로 생성하는 것을 막을 수 있습니다.구조 함수에 접근 수식자를 사용하지 않으면 기본적으로 개인 구조 함수입니다.그러나 일반적으로private 수식자를 사용하여 이 종류가 실례화되지 않는다는 것을 명확하게 나타낸다.
실례 필드나 실례 방법이 없을 때나, 클래스의 실례를 얻기 위해 방법을 호출할 때, 클래스를 만드는 실례를 막는 데 개인 구조 함수를 사용할 수 있습니다.만약 클래스 중의 모든 방법이 정태적이라면 전체 클래스를 정태로 만드는 것을 고려할 수 있다.
다음은 개인 구조 함수를 사용하는 클래스의 예입니다.
public class Counter
{
private Counter() { }
public static int currentCount;
public static int IncrementCount()
{
return ++currentCount;
}
}
class TestCounter
{
static void Main()
{
// Counter aCounter = new Counter(); // Error
Counter.currentCount = 100;
Counter.IncrementCount();
Console.WriteLine("New count: {0}", Counter.currentCount);
Console.WriteLine("Press any key to exit.");
Console.ReadKey();
}
}
이 예에서 다음 문에 대한 주석을 취소하면 구조 함수에 액세스할 수 없으므로 오류가 발생합니다.
// Counter aCounter = new Counter(); // Error
정적 구조 함수
정적 구조 함수는 정적 데이터를 초기화하거나 한 번만 실행할 수 있는 특정한 조작을 수행하는 데 사용됩니다.첫 번째 실례를 만들거나 정적 구성원을 인용하기 전에 정적 구조 함수를 자동으로 호출합니다.
class SimpleClass
{
static readonly long baseline;
static SimpleClass()
{
baseline = DateTime.Now.Ticks;
}
}
정적 구조 함수는 다음과 같은 특징을 가지고 있다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
구조 함수를 빌려 비원형을 계승하다Object {tag: Array[3]} tag: Array[3] 0: "js" 1: "html" 2: "aa" length: 3 __proto__: Array[0] __proto__: Article construc...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.