C \ # 27, 가상 멤버 virtual + this + base + new
5075 단어 C#
키워드: 부모 클래스 의 구성원 을 다시 쓰 고 virtual 로 수식 합 니 다.하위 클래스 에 대응 하 는 override 수식.
주의:
1. 필드 는 가상 일 수 없고 방법, 속성, 이벤트 와 색인 기 만 가상 일 수 있 습 니 다.
2. 하위 클래스 에서 부모 클래스 를 다시 쓰 는 가상 방법 에서 base "." 부모 클래스 의 가상 방법 을 사용 하면 이 방법 을 계속 쓸 수 있 습 니 다.
3. 하위 클래스 와 최초 로 가상 구성원 을 성명 한 클래스 사이 에 몇 개의 클래스 가 성명 되 었 든 가상 구성원 은 영원히 가상 구성원 이 될 것 이다.
4. 만약 에 클래스 A 가 가상 구성원 을 성명 하면 클래스 B 는 클래스 A 에서 파생 되 고 클래스 C 는 클래스 B 에서 파생 되면 클래스 C 는 해당 가상 구성원 을 계승 하 며 재 작성 을 선택 할 수 있 습 니 다. 클래스 B 가 해당 구성원 에 게 재 작성 을 했 든 안 했 든 간 에.
5. 파생 류 는 sealed 로 재 작성 하여 가상 계승 을 중단 할 수 있 습 니 다.
코드 예제:
class Father
{
public virtual void Function()
{
Console.WriteLine("Father");
}
}
class SonA:Father
{
public override void Function()
{
Console.WriteLine("SonA");
}
}
class SonB:Father
{
public override void Function()
{
Console.WriteLine("SonB");
}
}
class Gson:SonA
{
public override void Function()
{
Console.WriteLine("Gson");
}
}
class Program
{
static void Main(string[] args)
{
Father father = new Father();
SonA sonA = new SonA();
SonB sonB = new SonB();
Gson gson = new Gson();
father.Function();
sonA.Function();
sonB.Function();
gson.Function();
Console.ReadKey();
}
}
--->
Father
SonA
SonB
Gson
this
클래스 의 현재 인 스 턴 스 를 참조 합 니 다.
코드 예제:
class Class1
{
private string _name;
public string Name
{
get { return _name; }
set { _name = value; }
}
private int _age;
public int Age
{
get { return _age; }
set { _age = value; }
}
public Class1(string _name,int _age)
{
this._name = _name;
this._age = _age;
}
}
class Program
{
static void Main(string[] args)
{
Class1 class1 = new Class1("jpf",28);
Console.WriteLine(class1.Name);
Console.WriteLine(class1.Age);
Console.ReadKey();
}
}
--->
jpf
28
base
기본 클래스 를 대표 하고 base 를 사용 하면 기본 클래스 의 구조 함수, 속성 과 방법 등 을 호출 할 수 있 습 니 다.
하위 클래스 에 부모 클래스 를 호출 하 는 구조 함 수 를 표시 하지 않 으 면 부모 클래스 의 무 참 구조 함 수 를 기본적으로 호출 합 니 다.
코드 예제:
class Class1
{
private string _name;
public string Name
{
get { return _name; }
set { _name = value; }
}
private int _age;
public int Age
{
get { return _age; }
set { _age = value; }
}
public Class1(string _name, int _age)
{
this._name = _name;
this._age = _age;
}
public virtual void Function()
{
Console.WriteLine(1);
}
}
class Class2:Class1
{
public override void Function()
{
base.Function();
Console.WriteLine(2);
}
public Class2(string _name, int _age) : base(_name, _age)
{
}
}
class Program
{
static void Main(string[] args)
{
Class1 class1 = new Class1("jpfa",24);
Console.WriteLine(" :{0}, :{1}",class1.Name,class1.Age);
class1.Function();
Class2 class2 = new Class2("jpfb", 25);
Console.WriteLine(" :{0}, :{1}", class2.Name, class2.Age);
class2.Function();
Console.ReadKey();
}
}
--->
:jpfa, :24
1
:jpfb, :25
1
2
정적 구성원 방법 에 서 는 base 와 this 키 워드 를 사용 할 수 없습니다.
new
하위 클래스 에 서 는 부모 클래스 에서 물 려 받 은 어떤 방법 을 다시 쓰 지만, 부모 클래스 의 방법 을 바 꾸 는 것 이 아니 라 숨 기 고 키워드 new 를 사용 해 야 합 니 다.
숨겨 진 방법 호출: 하위 클래스 성명 의 대상 을 사용 하면 하위 클래스 의 방법 을 호출 합 니 다.부모 클래스 성명 의 대상 을 사용 하면 부모 클래스 의 방법 을 사용 합 니 다.
코드 예제:
class Class1
{
public void Function()
{
Console.WriteLine(1);
}
}
class Class2:Class1
{
public new void Function()
{
Console.WriteLine(2);
}
}
class Program
{
static void Main(string[] args)
{
Class1 class1 = new Class1();
class1.Function();
Class2 class2 = new Class2();
class2.Function();
Class1 class3 = new Class2();
class3.Function();
Console.ReadKey();
}
}
--->
1
2
1
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 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에 따라 라이센스가 부여됩니다.