将类作为参数传递的通用方法

时间:2014-07-21 19:05:37

标签: c# c#-4.0

我是新来的,所以请在标记我的问题之前-1请提供您的建议。

在我的下面的代码中,我想创建一个泛型类型函数,而不是“SendFirstRequest”和“SendSecondRequest”。或者我们如何传递和投射物体?

static void Main(string[] args)
            {
                MyFirstRequest objRequest1 = new MyFirstRequest
                {
                    MyFirstRequest_ID = 1
                };
                SendFirstRequest(objRequest1);

                MySecondRequest objRequest2 = new MySecondRequest
                {
                    MySecondRequest_ID = 1
                };
                SendSecondRequest(objRequest2);
            }

            public static MyFirstResponse SendFirstRequest(MyFirstRequest objRequest)
            {
                MyFirstResponse objResponse = CreateDate1(objRequest);
                return objResponse;
            }

            public static MySecondResponse SendSecondRequest(MySecondRequest objRequest)
            {
                MySecondResponse objResponse = CreateDate2(objRequest);
                return objResponse;
            }

            public static MyFirstResponse CreateDate1(MyFirstRequest request)
            {
                MyFirstResponse objRespo = new MyFirstResponse
                {
                    MyFirstResponse_Name = "A",
                    MyFirstResponse_Address = "Address1"
                };
                return objRespo;
            }


    public static MySecondResponse CreateDate2(MySecondRequest request)
    {
        MySecondResponse objRespo = new MySecondResponse
            {
                MySecondResponse_Name = "A",
                MySecondResponse_Address = "Address1"
            };
        return objRespo;
    }

1 个答案:

答案 0 :(得分:1)

问题在于MyFirstRequestMyFirstResponseMySecondRequestMySecondResponse之间没有明显的关系来有效地使用泛型。这些类型甚至具有不同的属性名称,因为它们以类名为前缀(这也会阻止使用dynamic)。

这似乎不是仿制药的好选择。如果你不仅仅是这两种类型,反射会减少代码,但会将错误推迟到运行时。

一些设计变更会使仿制品变得更加合理:

  • Response类的属性
  • 中取出类名前缀
  • 使用基类或接口来定义MyFirstResponseMySecondResponse
  • 的(现在)公共属性
  • 为每个CreateRequest类型添加Request方法,该方法将返回相应的Response类型。