2012-06-25 2 views
0

나는 다음과 같은 Generices을 구현 한 : 그런 다음제네릭 및 추상 클래스는

public class GenericAnimal<T> 
    { 
    public int legs; 
    public void Walk() 
    { 
     Console.WriteLine("Animals Walk...."); 
    } 
} 

public class Dog 
{ 
    public void Bark() 
    { 
     Console.WriteLine("Barking...."); 
    } 
} 

public class Cat 
{ 
    public void Mew() 
    { 
     Console.WriteLine("Mewing...."); 
    } 
} 

내가 클래스를 사용하고 다음과 같이하십시오 dogObj 및 catObj 모두에서

 GenericAnimal<Dog> dogObj = new GenericAnimal<Dog>(); 
     GenericAnimal<Cat> catObj = new GenericAnimal<Cat>(); 

을, 나는 "워크 무엇입니까 "방법. 추상 클래스를 사용하면이 일을 할 수 있습니다. 그렇다면 Generics를 Abstract 클래스보다 더 많이 사용하는 이점은 무엇입니까?

+0

예에서는 generic을 사용할 수 없습니다. –

+8

7 개의 질문과 답변이 없습니다 - 가능한 경우 이전 게시물에 대한 답변으로 질문을 표시하십시오. – Kane

+0

당신의 dogObj 나무 껍질합니까? 너 고양이 오브 뮤? –

답변

5

귀하의 경우 아무 것도 아닙니다. 제네릭은 다른 유형으로 코드를 재사용 할 수있는 시나리오에서 의미가 있습니다. GenericAnimal<T>에는 T으로 아무 것도하지 않습니다. 사용하려고 다음 List<T>을 사용하지 않고 처음 - 만, 두 번째는 개 목록이 아니라 첫 번째 고양이의 목록입니다

public class Animal 
{ 
    public int legs; 
    public void Walk() 
    { 
     Console.WriteLine("Animals Walk...."); 
    } 
} 

public class Dog : Animal 
{ 
    public void Bark() 
    { 
     Console.WriteLine("Barking...."); 
    } 
} 

public class Cat : Animal 
{ 
    public void Mew() 
    { 
     Console.WriteLine("Mewing...."); 
    } 
} 

을 두 개의 목록을 만들어보십시오

0

이 대신 작성하려고 List<T>. 난 당신이 더 나은

0
다음

public class GenericAnimal<T> 
{ 
    public T Instance{get;set;} 
    public int legs; 
    public void Walk() 
    { 
     Console.WriteLine("Animals Walk...."); 
    } 
} 

에 코드를 변경

이해하는 데 도움이 될 것입니다 그리고 당신은 DogCat를 사용할 수있을 것이라고 생각합니다. 그러나 eyossi는 그런 종류의 상황에 대해 더 나은 코드를 설명했습니다.

1

GenericsInheritance은 완전히 다른 개념으로 완전히 다른 기능을 가지고 있습니다. 그러한 비교가 없다. "Generics를 Abstract 클래스보다 더 많이 사용하는 이점은 무엇입니까?" 그러한 의미에서 모든 하위 객체의 공통 기능을 추상화 할 수 있다면 Abstract class을 사용하는 것이 좋습니다. HereGenerics에 대한 자세한 정보입니다.

1

귀하의 구체적인 예는 제네릭이없는 일반 상속에 의해 더 잘 해결됩니다 (Dog 및 Cat 하위 클래스 Animal 모두). 그러나 이제는 동물 목록을 원한다고합니다. 비 제네릭 솔루션으로 cat 및 dog 인스턴스를 추가 할 수있는 ArrayList를 선택할 수 있습니다. 그러나 ArrayList의 Add 메서드는 개체를 매개 변수로 사용합니다. 따라서 목록에 물고기를 추가 할 수도 있고 물고기를 걸을 수도 없습니다. 모든 동물에게 걷기를 지시하기 위해 목록을 처리 할 때 먼저 동물임을 확인해야합니다.

여기서 제네릭이 도움이됩니다. List < Animal>을 사용하여 목록을 정의한 다음 "is Animal"을 준수하는 개체 만 목록에 추가 할 수 있습니다. 물고기가 동물이 아니라는 가정하에 추가하려고하면 컴파일러 오류가 발생합니다. 또한 목록에있는 항목을 가져올 때 객체가 아닌 Animal 인스턴스를 가져 오므로 즉시 처리하도록 지시 할 수 있습니다.

관련 문제