派生类中的Casting Interface属性

Jon*_*Jon 3 .net c# interface

我想知道是否有一种方法可以在派生类中转换接口属性,例如:

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

public MyClass : IImageGenerator
{
    public Image FinalImage{ get;set; }  // Its cast as Image instead of Object
}
Run Code Online (Sandbox Code Playgroud)

如果在界面中将对象设置为对象,我必须FinalImage as Image在整个地方进行操作,并且想知道是否有办法不这样做.我能想到的唯一另一件事是在派生类中创建一个属性,该属性将接口属性作为Image表示返回,例如

public Image MyCastProperty
{
    get {return FinalImage as Image;}
}
Run Code Online (Sandbox Code Playgroud)

Jon*_*eet 8

你可以这样做:

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;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

替代 - 并且最好 - 使界面通用:

public interface IImageGenerator<T>
{
    T FinalImage { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

你真的需要在酒店IImageGenerator有一个二传手吗?这听起来不像我期望的发电机.