2011-04-20 2 views
3

Может ли кто-нибудь помочь мне с обходом для этой проблемы?Литейные генераторы

У меня есть следующий класс:

public partial class FObjectSet<T> : IObjectSet<T> where T : class 
{ 
... 
} 

У меня также есть следующий класс:

public partial class FContext : IContext, IDisposable 
{ 
    public ObjectSet<T> CreateObjectSet<T>() where T : class 
    { 
     var fakeObjectSet = new FObjectSet<T>(); 
     return (fakeObjectSet as IObjectSet<T>) as ObjectSet<T>; 
    } 
} 

Метод CreateOjectSet возвращает нуль, как литая не работает.

p.s. Приведенный выше код пытается подделать метод System.Data.Objects.ObjectContext.CreateObjectSet.

+2

Does 'FObjectSet ' inherit from 'ObjectSet '? Если нет, это не сработает. – Ryan

ответ

4

В вашем примере FObjectSet не наследуется от ObjectSet. Он реализует только интерфейс IObjectSet.

Если она унаследует от ObjectSet, вам не нужно, чтобы бросить его в IObjectSet перед заливкой его в ObjectSet, на самом деле, вам не нужно, чтобы бросить его на всех ...

public partial class FObjectSet<T> : ObjectSet<T> where T : class 
{ 
... 
} 

public partial class FContext : IContext, IDisposable 
{ 
    public ObjectSet<T> CreateObjectSet<T>() where T : class 
    { 
     var fakeObjectSet = new FObjectSet<T>(); 
     return fakeObjectSet; 
    } 
} 
1

Это не работает, потому что FObjectSet<T> не распространяется ObjectSet<T>. Вместо этого вы можете вернуть IObjectSet<T>, но я не знаю, будет ли это делать то, что вы хотите.

Смежные вопросы