C# 멀티태스킹-객체 프로그래밍을 위한 3대 메커니즘 2
6102 단어 대상을 향하다
나의 이해는 같은 조작이 서로 다른 대상에게 작용할 때 서로 다른 결과가 있을 수 있다는 것이다. 즉, 같은 방법이 수요에 따라 서로 다른 대상에게 작용할 때 서로 다른 실현이 있을 수 있다는 것이다.
계승을 통해 이루어진 서로 다른 대상이 같은 방법을 사용해 서로 다른 행위를 나타내는 것을 다태라고 한다.
C#의 멀티태스킹에는 인터페이스 멀티태스킹, 계승 멀티태스킹이 포함됩니다.그 중에서 계승 다태는 가상 방법을 통해 실현된 다태와 추상적인 방법을 통해 실현된 다태성을 포함한다.
예를 들어 기류 동물은 모두 먹는 방법이 있지만 서로 다른 동물이 먹는 것은 다르다. 예를 들어 늑대가 고기를 먹고 양이 풀을 먹는다. 이렇게 먹는 방법은 파생류에서 다시 다음과 같이 실현해야 한다. 운행할 때 기류를 가리키는 지침을 통해 파생류를 실현하는 방법을 사용한다.
다음은 예를 들어 다태성을 실현한다.
1. 인터페이스 다태성
동물이 먹는 방법을 하나의 인터페이스(IAnimal)에 넣고 구체적인 동물류(Wolf/Sheep)로 하여금 이 인터페이스를 계승하고 자신의 수요에 따라 이 인터페이스를 실현하게 한다.
코드 구현:
class Program {
static void Main(string[] args) {
new Wolf().Eat();
new Sheep().Eat();
}
}
public class Wolf : IAnimal {
//
public void Eat() {
Console.WriteLine(" !");
}
}
public class Sheep : IAnimal {
//
public void Eat() {
Console.WriteLine(" !");
}
}
//
public interface IAnimal {
void Eat();
}
인터페이스의 다태성은 서로 다른 클래스가 같은 인터페이스를 계승한 후에 자신의 수요에 따라 계승된 인터페이스를 다시 실현해야 한다는 것이다. 이렇게 같은 방법으로 서로 다른 클래스에 서명하면 서로 다른 조작을 실현할 수 있다.
2. 계승의 다태성
2.1.가상 방법을 통해 이루어진 다중태(virtual,override)
우선 기본 클래스에서virtual 방법을 실현한 다음에 파생 클래스에서 자신의 필요에 따라override로virtual 방법을 다시 써야 한다.만약 이 방법이 계속 다시 쓰여지기를 원하지 않는다면, 이 방법을 sealed 방법으로 써라.
virtual 방법은 기본 클래스에서 이루어져야 합니다.
코드 구현:
class Program {
static void Main(string[] args) {
new Wolf().Eat();
new Sheep().Eat();
new Goat().Eat();
}
}
public class Wolf : Animal {
//
public override void Eat() {
base.Eat();
Console.WriteLine(" !");
}
}
public class Sheep : Animal {
//
public override void Eat() {
base.Eat();
Console.WriteLine(" !");
}
}
public class Goat : Sheep {
// , Eat override, sealed
public sealed override void Eat() {
//base.Eat();
Console.WriteLine(" !");
}
}
//
public class Animal {
public virtual void Eat() { }
}
2.2.추상적인 방법으로 이루어진 다태적 (abstract,override)
추상적인 방법은 반드시 추상류에 정의해야 한다.추상 클래스는 실례를 만들 수 없습니다.
기본 클래스의 추상적인 방법은 성명만 할 수 있고 실현할 필요가 없기 때문에 파생 클래스에서 추상적인 방법을 다시 쓸 때base 방법이 없다.
코드는 다음과 같습니다.
class Program {
static void Main(string[] args) {
new Wolf().Eat();
new Sheep().Eat();
new Goat().Eat();
}
}
public class Wolf : Animal {
//
public override void Eat() {
Console.WriteLine(" !");
}
}
public class Sheep : Animal {
//
public override void Eat() {
Console.WriteLine(" !");
}
}
public class Goat : Sheep {
// , Eat override, sealed
public sealed override void Eat() {
Console.WriteLine(" !");
}
}
//
public abstract class Animal {
public abstract void Eat();
}
요약:
1. 허위 방법을 다시 쓸 때base방법(base.eat())이 있고, 추상적 방법을 다시 쓸 때base방법이 없다. 이유는 허위 방법은 반드시 기본 클래스에서 실현되어야 하며, 추상적 방법은 기본 클래스에서만 설명하고 실현할 필요가 없기 때문이다.
2. 파생류에서 허법의 실현을 다시 쓰지 않을 수 있지만 파생류는 추상적인 방법의 실현을 다시 써야 한다. 원인은 다음과 같다.
3. 비추상적인 방법을 포함하는 비추상적인 클래스는 실례(대상)로 만들 수 있지만 추상적인 방법을 포함하는 추상적인 클래스는 실례로 만들 수 없습니다.
4. 인터페이스를 계승하는 파생류는 반드시 인터페이스를 실현해야 하는 방법이다. 인터페이스도 성명방법만 책임지고 실현은 책임지지 않기 때문이다.
5. 인터페이스의 다태성은 오버라이드 재작성 방법으로 할 필요가 없다.
녹차 블로그에서
텍스트 링크: http://www.cnblogs.com/greenteaone/archive/2012/01/16/2320841.html
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
루비 대상 지식 요약initialize 방법은 표준적인 루비 클래스 방법으로 클래스의 구조 함수이며 다른 대상 프로그래밍 언어의constructor 작업 원리와 유사하다.대상을 만드는 동시에 클래스 변수를 초기화하려면 initializ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.