方法内部的泛型对象

本文关键字:对象 泛型 内部 方法 | 更新日期: 2023-09-27 18:12:25

我对通用对象有一些疑问,我不知道我的想法是否可以轻松实现…

我有实现相同接口的对象,所以除了主对象之外方法几乎是相等的,如下面的代码:

public bool Func1 (Bitmap img)
{
   Obj1                 treatments    = new Obj1 ();
   List<UnmanagedImage> unmanagedList = treatments.ExtractLetters(img);
   // Check image treatments
   if (!treatments.WasSuccessful)
      return false
   return true
}
public bool Func2 (Bitmap img)
{
   Obj2                 treatments    = new Obj2 ();
   List<UnmanagedImage> unmanagedList = treatments.ExtractLetters(img);
   // Check image treatments
   if (!treatments.WasSuccessful)
      return false
   return true
}
在本例中,我不想复制代码。是否有任何简单的方法使这个Obj1和Obj2通用?因为我只能写一个函数,然后这个函数可以在对象中进行强制类型转换,因为其余的都是一样的。

谢谢!

方法内部的泛型对象

是的,有-假设所有Treatments实现提供ExtractLettersWasSuccessful的公共接口ITreatments,您可以这样做:

interface ITreatments {
    List<UnmanagedImage> ExtractLetters(Bitmap img);
    bool WasSuccessful {get;}
}
public bool Func<T>(Bitmap img) where T : new, ITreatments
{
    T treatments    = new T();
    List<UnmanagedImage> unmanagedList = treatments.ExtractLetters(img);
    return treatments.WasSuccessful;
}

现在你可以这样调用这个函数:

if (Func<Obj1>(img)) {
    ...
}
if (Func<Obj2>(img)) {
    ...
}

仅当Obj1Obj2实现接口或继承定义ExtractLettersWasSuccessful的基类时。否则,它们就是不相关的方法,只是碰巧具有相同的名称。

如果有一个接口或基类,你可以这样做:

public bool Func1<T>(Bitmap img) where T: ITreatments, new()
{
   T treatments = new T();
   List<UnmanagedImage> unmanagedList = treatments.ExtractLetters(img);
   // Check image treatments
   if (!treatments.WasSuccessful)
      return false
   return true
}