题
这是我想做的事:
public [type determined at runtime] ImageToShow
{
get
{
if(this.IsWebContext)
{
return this.GetString();
}
else
{
return this.GetBitmap();
}
}
}
目前第一看似乎简单可行的,如果T为与这个类的实例被创建的一般类型。但我想做的是成为基于图像属性中做出的判定一个字符串或位图,这样的什么服务器作为图像包含在图像属性中的知识和别人没有地方需要了解它。我当然可以使返回类型“对象”,它会工作,但我不希望装箱和拆箱低效我也不想要反射参与。
我只是想和你们一起检查,如果这是可能的之前,我放弃了这个想法。
解决方案
拳击当转换值类型为引用类型发生。
int i = 5;
object o = i; // Boxing
由于你只返回String
或Bitmap
,这两者都是引用类型,可以使用对象,而不必担心拳击或取消装箱。
其他提示
这岂不是对调用者“知道”好,使用公共财产
YourClass.IsWebContext
什么期望?
然后,你将能够使用通用类型T
好像不是解决这个工作,你应该考虑不同的设计。例如创建一个单独的类一起为将是WebContext一切和执行一个通用接口。
首先,返回参考类型作为对象并不拳击。拳击只使用值类型为引用类型时出现。
现在让我们假设你正在使用的返回类型对象。然后,你可以验证,如果所返回的对象实例是使用is
操作某种类型的。
object o = myClass.ImageToShow;
if (o is String)
{
// Use as a String
}
else if (o is Bitmap)
{
// Use as a Bitmap
}
其次,我不会建议检查IsWebContext
在每个属性。这将更有意义创建一个基类,和专门给定它是在所使用的环境。
是,使用的接口。
public interface IAmImage {}
public class StringImage: IAmImage
{
private string img;
public string Image { get { return img; } set { img = value; } }
public StringImage(string image) { img = image;}
}
public class BitmapImage: IAmImage
{
private Bitmap img;
public Bitmap Image { get { return img; } set { img = value; } }
public BitmapImage(Bitmap image) { img = image;}
}
...并在客户端代码......
public IAmImage ImageToShow
{
get
{
return this.IsWebContext?
new StringImage(this.GetString()):
new BitmapImage(this.GetBitmap());
}
}
不隶属于 StackOverflow