我想知道是否有一种方法可以在派生类中强制转换接口属性,例如:
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
,并且想知道是否有办法不这样做。我能想到的另一件事是在派生类中创建一个属性,该属性将接口属性作为图像表示返回,例如。
public Image MyCastProperty
{
get {return FinalImage as Image;}
}
答案 0 :(得分: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;
}
}
}
替代 - 并且最好 - 使界面通用:
public interface IImageGenerator<T>
{
T FinalImage { get; set; }
}
你真的需要IImageGenerator
在房产中拥有 setter 吗?这听起来不像我期望的生成器。