2013-03-01 2 views
1

내가 얻을 :
암시 'WpfApplication1.Dao'상속 일반 불변성 (invariance) C# 4

public abstract class Animal { } 

public class Dog : Animal { } 

public class Cow : Animal { } 

public abstract class Dao<T> where T : Animal 
{ 
    public void Insert(T t); 
} 

public class DogDao : Dao<Dog> { } 

public class CowDao : Dao<Cow> { } 

public class Main 
{ 
    public Main() 
    { 
     Dao<Animal> dao = null; 

     if (true) dao = new DogDao(); 
     else dao = new CowDao(); 
    } 
} 
에 유형 'WpfApplication1.CowDao을'변환 할 수 없습니다

난 그냥 내 목표에 도달 할 -
가 내 구조 변경해야한다는 생각 '중립'인스턴스를 만드는>,하지만 난

내가 .NET을 사용하고 방법을 모른다 프레임 워크 4

덕분에

답변

0
는로 다오 계층에 대한 귀하의 상속을 변경

public class DogDao : Dao<Animal> { } 

public class CowDao : Dao<Animal> { } 

편집 : 기본 클래스에서 일반에서 상속하지 않는 파생에서

public abstract class Dao<T> where T : Animal 
    { 
     public virtual void Insert(T t) 
     { 

     } 

     protected void ExecuteQuery(string quer) 
     { 

     } 
    } 

    public class DogDao : Dao<Dog> 
    { 
     public override void Insert(Dog t) 
     { 
      string insert = "INSERT INTO DOG ..."; 

      base.ExecuteQuery(insert); 
     } 
    } 

    public class CowDao : Dao<Cow> 
    { 
     public override void Insert(Cow t) 
     { 
      string insert = "INSERT INTO COW ..."; 

      base.ExecuteQuery(insert); 
     } 

    } 
+0

하지만 내 일반적인 구조는 유용하지 않고, 내가 당신 때문에 DOU 개 및 CowDaos, 왜이 – DarkShaDoWke

+0

소와 강아지의 특정 방법의 필요 당신의 기본 DAO에 구체적인 방법이 필요합니까? 그냥 특정 daos에 그들을 구현 – Dominik

+0

다른 SQL 쿼리 때문에 – DarkShaDoWke

0

제네릭 당신 때문에 서로를 던지지 않을 수도 있습니다. 대신, 그런 식으로 변환하는 확장 방법 ToGenericParent 쓰기 :

public static Generic<Parent> ToGenericParent(this Generic<Derived> derived) 
     { 
      return new Generic<Parent>() { Value = derived.Value }; 
     } 
+0

어떻게 구현해야합니까? – DarkShaDoWke