C#:Upper cast - 列出<interface>到List <class> - 强制内部类的obejct

时间:2017-06-21 08:39:50

标签: c# oop c#-4.0

我有一个定义为

的界面
public interface INamedReader
{
     string DisplayInfoLine { get; }
     string DisplayName { get; }
}

和一个实现该接口的类,但它是一个内部类

internal class NamedReader : INamedReader, INotifyPropertyChanged
    {
        public NamedReader();

        public string DisplayInfoLine { get; set; }
        public string DisplayName { get; set; }

        public event PropertyChangedEventHandler PropertyChanged;

        public override string ToString();
        protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = "");
        protected virtual bool Set<TField>(ref TField field, TField value, [CallerMemberName] string propertyName = "");
    }

和一个实现上述NamedReader类的类

internal class NamedReaderDevice : NamedReader
{
    public NamedReaderDevice();

    public string Id { get; set; }
}

现在我定义了实现INamedReader

的类
public class ReaderDetails: INamedReader
{
     public string DisplayInfoLine { get; }

     public string DisplayName { get; }
}

然后我创建了一个返回List的函数。

public List<ReaderDetails> GetReaders
{
     var readers = new List<ReaderDetails>();
     var Ireaders = someobject.Getreaders();// Returns the list of NameReaderDevice (which is an internal class).
     // Now i would like cast Ireaders as readers and return.
}

有人可以帮我解决这个问题,那会很棒。

1 个答案:

答案 0 :(得分:0)

您基本上是在尝试一个类转换为完全不同的类,如图所示,尝试转换 Class2Class3

enter image description here

在这种情况下,即使他们共享一个界面,也不能在一个界面之间强制

您有几个选择:

  1. 使用方法(扩展名或其他方式)在类之间进行转换,使用Reflectionserialization(效率不高)
  2. 使用conversion operator(更多详情here
  3. Getreaders()方法中返回一个接口而不是显式实现的类,然后在应用程序中使用接口而不是显式实现的类;
  4. 如果(3)如果你需要或想要进一步解耦你的类实现,那么你可以使用依赖注入(例如。SimpleInjector,可以通过nuget访问)。在那种情况下,您可以在代码中创建所述接口的对象,该代码无法访问实现它的内部类,