Свойство интерфейса приведения в производном классе - PullRequest
3 голосов
/ 04 июля 2011

Мне было интересно, есть ли способ привести свойство интерфейса в производный класс, например:

public interface IImageGenerator
{
    object FinalImage { get; set; }
}

public MyClass : IImageGenerator
{
    public Image FinalImage{ get;set; }  // Its cast as Image instead of Object
}

Если в интерфейсе все настроено как объекты, я должен сделать FinalImage as Image всеи было интересно, есть ли способ не делать этого.Единственное, о чем я могу подумать, это создать свойство в производном классе, которое возвращает свойство интерфейса в виде представления Image, например

public Image MyCastProperty
{
    get {return FinalImage as Image;}
}

1 Ответ

8 голосов
/ 04 июля 2011

Вы можете сделать это:

public interface IImageGenerator
{
    object FinalImage { get; set; }
}

public MyClass : IImageGenerator
{
    public Image FinalImage{get;set;}

    object IImageGenerator.FinalImage
    {
        get { return FinalImage; }
        set
        {
            if (!(value is Image))
            {
                throw new ArgumentException("Must be an image");
            }
            FinalImage = (Image) value;
        }
    }
}

Альтернативно - и желательно - сделать интерфейс универсальным:

public interface IImageGenerator<T>
{
    T FinalImage { get; set; }
}

Вам действительно нужно IImageGenerator для установки в собственности, хотя?Это не похоже на то, что я ожидал бы для генератора .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...