2012-03-15 2 views
2
public TResponse ExecuteCustomMessage<TResponse>(IModbusMessage request) 
    where TResponse : IModbusMessage, new() 

무엇을 의미합니까? 전에는 C#에서 2 년 동안 코딩 했었지만 ... 전에는 아무 것도 보지 못했습니다 ... 함수가 될 예정이지만, 무엇이 <인지와 키워드 where 및 new()가 확실하지 않습니다. 끝에 ...C# 구문 : 여기서 TResponse, new()

+7

http://msdn.microsoft.com/en-us/library/512aeb7t.aspx 당신이 거기 볼 수 – SLaks

+0

이상한 짐승 ... – Mehrdad

+0

나는 그것에 대해 생각하지 않습니다 제네릭. 유형 제약에 관한 것 같아요. 여러분은 단지'TResponse' 타입이'IModbusMessage'의 서브 클래스이거나 그 무엇이든간에, 인자를 취하지 않는 생성자가 있어야만한다고 말합니다. 많은 경우에 이것은 당신이 당신의 클래스에서'TResponse'의 새로운 객체를 만들고 싶다는 것을 의미합니다. –

답변

8

IModbusMessage 인터페이스를 구현하고 매개 변수없는 생성자가있는 TResponse 제네릭 형식의 경우 constraint입니다.

여기서 T : (인터페이스 이름) 형식 인수이거나 지정된 인터페이스를 구현해야합니다. 다중 인터페이스 제한 조건을 지정할 수 있습니다. 구속 인터페이스는 일반 일 수도 있습니다.

여기서 T : new() 형식 인수에는 public 매개 변수가없는 생성자가 있어야합니다. 다른 제약 조건과 함께 사용할 경우 new() 제약 조건을 마지막에 지정해야합니다.

또한 다른 사람들이 지적했듯이 제네릭 문서 (의견에서 SLaks가 지적한)를 읽는 것이 좋습니다.

+1

나는 OP가 당신의 대답을 이해하는 데 필요한 전제 지식이 있는지 의심 스럽다. – ChaosPandion

2

일반적인 방법입니다. 메소드가 사용할 수있는 객체의 유형 또는 패밀리를 지정합니다. where 절은 TReponse가 IModbusMessage 인터페이스를 구현해야하며 new 키워드로 인스턴스화 할 수 있어야한다는 제약 조건입니다. 그것이 무엇을 의미하는지

4

TResponseIModbusMessage

new()가 기본 매개 변수가없는 생성자를 제공의 의미 인터페이스를 구현하는 유형을 사용해야합니다.

나는 당신이 더 읽기 시작해야한다고 생각 대한 Generics