包装不同程序员的类[英] Wrapping classes of a different programmer

本文是小编为大家收集整理的关于包装不同程序员的类的处理方法,想解了包装不同程序员的类的问题怎么解决?包装不同程序员的类问题的解决办法?那么可以参考本文帮助大家快速定位并解决问题。

问题描述

假设我有很多由不同程序员开发的类,所以我无法更改他的代码.所有这些类都具有相同的构造函数,并且它们都派生自同一个基类.
我想修改这些类的基本构造函数(但我不能).有没有办法重用这些类而不直接更改它们,而是使用不同的构造函数.一个例子:

class A
      {
          public A(List<double> a) { }
      }

      class A1: A
      {
          public A1(List<double> a):base(a) { }
      }

      class A2:A
      {
          public A2(List<double> a):base(a) { }
      }


我不能更改 A、A1、A2 类.我想使用它们允许接受 double[] 而不是 List<double>作为构造函数.我不想每次都包装.有设计解决方案吗?
解决方案
您可以创建一个具有通用方法的静态类来创建对象.它假设所有的构造函数都是相同的,在这种情况下不会有问题.

//使用 System.Reflection;public static class Wrapper{// where 子句确保它只适用于 A 类及其派生类public static T CreateA<T>(double[] a) where T : TheOriginalClasses.A{//获取cconstructorType[] types = new Type[1];types[0] = typeof(List<double>);ConstructorInfo constructorInfo = typeof(T).GetConstructor(types);//调用构造函数object[] objects = new object[1];对象[0] = a.ToList();T value = constructorInfo.Invoke(objects) as T;返回 ;}}


您可以将其称为以下代码:

double[] a = new double[3] { 0.5, 1.1, 2.5 };var testA = Wrapper.CreateA(a);var testA1 = Wrapper.CreateA(a);var testA2 = Wrapper.CreateA(a);Console.WriteLine(testA.GetType().ToString());Console.WriteLine(testA1.GetType().ToString());Console.WriteLine(testA2.GetType().ToString());


我不确定这段代码是否会赢得代码选美比赛,但它会给你一个通用的包装器.缺点可能是由于使用反射而导致性能损失.

本文地址:https://www.itbaoku.cn/post/1355773.html