C#일반 구속조건
3265 단어 C#
글은 처음에 프레젠테이션 코드의 원고를 제시했다(이 기초 위에서 수정, 프레젠테이션, 설명).
class MyList
{
List list = new List();
public T this[int i]
{
get { return list[i]; }
set { this.list[i] = value; }
}
}
class Person
{
public string Name { get; set; }
}
다음은 순서대로 프레젠테이션 코드 원고를 수정하여 서로 다른 유형의 범용 제약을 설명한다.
1 일반 매개변수를 값 유형으로 지정
class MyList where T:struct
{
...
}
구속을 적용한 후의 효과를 살펴보고 MyList 클래스를 다음과 같이 인스턴스화합니다.
MyList list = new MyList();
다음과 같은 오류 메시지가 나타납니다.
유형 "GencConstraint.Person"은 null이 될 수 없는 값 유형이어야 일반 유형 또는 방법인 "GencConstraint.MyList"의 매개변수 "T"로 사용할 수 있습니다.
MyList 클래스를 다음과 같이 인스턴스화하여 모든 작업을 정상적으로 수행합니다.
MyList list = new MyList();
2 인용 형식으로 일반 매개 변수 지정하기
class MyList where T:class
{
...
}
일반 구속조건을 참조 유형으로 수정하면 Person 클래스가 참조 유형이므로 일반 구속조건을 충족하는 오류 프롬프트가 사라집니다.
3 범용 매개 변수의 공통된 구조 함수를 지정한다
class MyList where T:new()
{
...
}
Person 클래스에 대해 다음과 같은 코드를 사용하여 비공개 참조 함수를 추가합니다.
class Person
{
public string Name { get; set; }
private Person()
{
//do nothing
}
}
MyList
MyList list = new MyList();
컴파일 오류가 발생했습니다. 프롬프트:
'GencConstraint.Person'은 공통적으로 파라미터가 없는 구조 함수를 가진 비추상적인 유형이어야 범용 유형이나 방법인'GencConstraint.MyList'의 파라미터'T'로 사용할 수 있다.
하하, 구속이 작용했어.
4 지정한 일반 매개 변수는 지정한 기본 클래스에 파생되어야 합니다
추상 클래스 SeniorAnimal 추가
abstract class SeniorAnimal//
{
public abstract void Speak();//
public abstract void UseTool();//
}
지정 범용 매개변수는 기본 클래스 SeniorAnimal에서 파생되어야 합니다.
class MyList where T : SeniorAnimal
{
...
}
MyList
MyList list = new MyList();
컴파일 오류가 발생했습니다. 프롬프트:
유형'GencConstraint.Person'을 일반 유형 또는 방법인'GencConstraint.MyList'의 유형 매개 변수'T'로 사용할 수 없습니다.'GencConstraint.Person'에서'GencConstraint.SeniorAnimal'로 은밀한 참조 변환이 없습니다.
Person 클래스가 SeniorAnimal 클래스에서 상속되도록 코드 수정
class Person : SeniorAnimal
{
public string Name { get; set; }
public override void Speak()
{
Console.WriteLine(" !");
}
public override void UseTool()
{
Console.WriteLine(" !");
}
}
다시 편역하면 모든 것이 정상이다.
5 지정된 일반 매개 변수는 지정된 인터페이스를 실현해야 한다
프레젠테이션 상황은 4점과 유사하여 프레젠테이션 코드를 제공하지 않습니다.
6 일반 매개변수는 일반 유형 U에 파생되어야 합니다. (raw 유형 구속조건)
class MyList where U : SeniorAnimal
{
List list = new List();
public void ShowInfo() where T : U
{
}
}
또한 같은 범용 매개 변수에 여러 개의 제약을 적용할 수 있다.
좋아, 게임 오버!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
WebView2를 Visual Studio 2017 Express에서 사용할 수 있을 때까지Evergreen .Net Framework SDK 4.8 VisualStudio2017에서 NuGet을 사용하기 때문에 패키지 관리 방법을 packages.config 대신 PackageReference를 사용해야...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.