2014-07-21 6 views
-2

새로운 질문입니다. 제 질문에 표시하기 전에 제발 -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; 
    } 
+0

[상속 사용] (http://msdn.microsoft.com/en-us/library/ms173149(v=80) .aspx). –

+0

제 질문은 객체 또는 제네릭 유형입니다. – Dev

답변

1

문제를 효과적으로 제네릭을 사용하는 MyFirstRequest, MyFirstResponse, MySecondRequestMySecondResponse 사이의 명백한 관계가 없습니다 것입니다. 클래스 이름 앞에 접두어가 붙어 있으므로 (심지어 dynamic의 사용을 막을 수도 있기 때문에) 유형에 다른 속성 이름이 있습니다.

이것은 제네릭에 적합한 후보는 아닙니다. 반사는 코드가 두 가지 유형 이상일 경우 코드를 줄이지 만 런타임에는 오류를 지연시킵니다.

  • Response 클래스의 속성 떨어져 클래스 이름 접두사를 가지고
  • 는의 (현재) 일반 속성을 정의하는 기본 클래스 또는 인터페이스를 사용하여

    제네릭 더 그럴듯하게 만들 것입니다 일부 설계 변경

    MyFirstResponseMySecondResponse
  • Response 유형을 반환하는 Request 유형마다 CreateRequest 메소드를 추가하십시오.
관련 문제