C# 返回正确的对象类型
本文关键字:对象 类型 返回 | 更新日期: 2023-09-27 18:35:49
public Object get()
{
switch (current_image_type)
{
case(image_type.Gray):
return (Image<Gray, Byte>)image_object;
case(image_type.Bgr):
return (Image<Bgr, Byte>)image_object;
default:
throw new Exception("No Image type set for ImageCV");
}
}
所以在这个 get 函数中,直到运行时我才知道要返回什么对象类型,所以我只返回了 Object 超类。但是,这并不好,因为当我获得返回的对象超类时,我将无法访问Image<,>
子类函数,除非我知道要将其转换为什么。有没有办法让我检查current_image_type
在运行时返回所需对象类型的对象类型?谢谢。
由于current_image_type
是包含类的可变属性,因此在编译时根本无法知道返回类型是什么。
我Image<T1, T2>
实现一个像 IImage
这样的接口,它封装了调用者需要的所有方法/属性。 然后,您可以返回一个类型化对象:
public IImage get() { ... }
如果您
无法修改Image<T1, T2>
,则可以创建一种中介类来完成相同的操作:
public ImageMediator<T> : IImage
{
private readonly Image<T, Byte> _image;
public ImageMediator(Image<T, Byte> image)
{
_image = image;
}
// TODO implement IImage
}
然后,只需将image_object
传递到中介器中即可获取IImage
类型:
case(image_type.Gray):
return new ImageMediator<Gray>((Image<Gray, Byte>)image_object);
case(image_type.Bgr):
return new ImageMediator<Bgr>((Image<Bgr, Byte>)image_object);
// Example of checking for type Image<int,string>
if(current_image_type.GetType() == typeof(Image<Int32,string))
return (Image<Int32,string>)current_image_type;
几种不同的方式。 您可以使用 GetType() 函数或使用 "as" 运算符,当且仅当它是该类型时,该运算符会将对象转换为给定类型。
我没有编译这个,所以不确定确切的语法,但你明白了......
// one way
Type t = o.get().GetType();
if ( t == typeof( Image<Gray, Byte> ) {
// we have an Image<Gray, Byte>
}
// another way
Image<Gray, Byte> grb = o.get() as Image<Gray, Byte>;
if ( grb != null ) {
// we have an Image<Gray,Byte>
}