繁体   English   中英

为派生类编写通用方法

[英]Write a generic method for derived classes

我有一个抽象的BaseClass,从中继承了多个派生类。 我想编写一个执行通用工作的通用方法,因此不需要为每个派生类编写该方法。

当前代码-

  public abstract class BaseClass{}


    public class Derived1 : BaseClass{
      public Derived1 CommonWork(){

      /* Common work */
      return objDerived1;
      }

}

 public class Derived2 : BaseClass{
      public Derived2 CommonWork(){

      /* Common work */
      return objDerived2;
      }

}

我想要的方式-

public T CommonWork where T : BaseClass

{
/* Common work */
return T;

}

现在,我不知道如何以及在哪里编写此方法。 Coudnt在其他任何地方都可以找到它。 请提出建议。 谢谢

你的意思是这样的:

public class CommonWork<T> 
  where T: BaseClass,
           new T()// <- probably you'll need it to create instances of T

  public T CommonWork(){
    T result = new T();
    ...

    return T;
  }
}

...

Commonwork<Derived2> common = new Commonwork<Derived2>();

BaseClass result = common.CommonWork();

您可以在BaseClass定义它,并在方法声明中包含通用参数:

public T CommonWork<T>() where T : BaseClass {
  T returnObj;
  returnObj = default(T);  // To initialize a new instance
  returnObj = this as T;   // To operate on the current object

  /* Common work */ 

  return returnObj;
}

检查一下

 class Program
    {
        static void Main(string[] args)
        {
            var derived1=new Derived1();
            derived1.CommonWork();

            var derived2 = new Derived2();
            derived2.CommonWork();

            Console.Read();
        }
    }

    public abstract class BaseClass
    {
        public string ClassName;

        public T CommonWork<T>(T obj)
        {
            var baseClass = obj as BaseClass;
            Console.WriteLine( baseClass.ClassName);
            return obj;
        }


    }

    public class Derived1 : BaseClass
    {
        public Derived1 CommonWork()
        {
            this.ClassName = "Derived1";
          return  this.CommonWork(this);            
        }

    }

    public class Derived2 : BaseClass
    {
        public Derived2 CommonWork()
        {
            this.ClassName = "Derived2";
           return this.CommonWork(this);

        }

    }

这是在基类中完成常规工作的方式,但是该方法返回派生的类对象:

public abstract class BaseClass<T> where T: BaseClass<T>, new()
{
    public int Value { get; private set; } 
    public T CommonWork()
    {
        var result = new T {Value = 1};
        return result;
    }
}

public class Derived1 : BaseClass<Derived1>
{
}

public class Derived2 : BaseClass<Derived2>
{
}

您这样称呼它:

Derived2 derived2 = new Derived2();
Derived2 anOtherderived2 = derived2.CommonWork();
int value = anOtherderived2.Value; // 2

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM