Невозможно создать экземпляр абстрактного класса или интерфейса, но это не абстрактный класс и не интерфейс?


У меня есть два класса, ни один из них не является абстрактным, и ни один из них не является интерфейсом.

IFileInfoClass:

 public class IFileInfo
 {
    #region Class Variables
    /// <summary>The file name.</summary>
    private string fileName = String.Empty;
    /// <summary>The file path.</summary>
    private string filePath = String.Empty;
    /// <summary>The date time stamp modified.</summary>
    private DateTime dateTimeStampModified = DateTime.Now;
    #endregion Class Variables

    #region Constructors
    /// <summary>Initializes a new instance of the <see cref="IFileInfo"/> class.</summary>
    public IFileInfo() { }
 ...
 //Some Public Properties and another constructor...ect...
 ...
 }

Тогда в вызывающем классе у меня есть вот что:

 public IObservable<IFileInfo> GetFilesList()
    {
        IObservable<IFileInfo> files = new IObservable<IFileInfo>(); //ERROR HERE
    }

Но когда я иду на компиляцию, я получаю ошибку en: Невозможно создать экземпляр абстрактного класса или интерфейса

 'System.IObservable<MyNameSpace.Models.IFileInfo>'

Но это не абстрактный класс, и это не абстрактный класс. Interface...so что это дает? Делает ли создание IObservable коллекции класса каким-то образом сделать его абстрактным?

К вашему сведению: IObservable исходит от MVVM-Light Galasoft.

Я имею в виду, что я знаю, что не могу создать экземпляр абстрактного класса или интерфейса, потому что абстрактные классы и интерфейсы ничего не делают и не должны делать, но это не то, что я пытаюсь сделать здесь! Чего мне не хватает?

Немного истории, я попытался создать его как реализацию класса FileInfo, благодаря некоторым другим предложениям с других сайтов, затем я узнал, что, конечно, Microsoft превратила это в запечатанный класс, что имеет смысл, как бы неприятно это ни было.

Именно поэтому я решил просто удалить наследование из FileInfo и запечь данные прямо в мой собственный класс, что прекрасно, если бы он все еще не думал, что он каким-то образом наследует от класса, от которого я на самом деле больше не наследую. На самом деле, я думаю, что теперь я преодолел это препятствие. На самом деле это не значит, что я пытаюсь наследовать от запечатанного класса больше. Но если серьезно, я просто кручу свои колеса. вот, есть идеи?

Заранее спасибо!

1 2

1 ответ:

Компилятор прав, потому что IObservable<T> - это интерфейс, а не класс,поэтому его нельзя создать.

Для получения дополнительной информации об этом интерфейсе вы можете прочитать this