2011-01-13 6 views
0
public class myclass 
{ 
    public int mymember { get; set; } 
} 

class MySetterClass<T> 
{ 
    // obj.mymember = o for myclass 
    public static void SetMember(string membername, object o, ref T obj) 
    { 
    } 
} 

Reflection API로이 작업을 수행 할 수 있습니까?일반 개체의 멤버를 설정 하시겠습니까?

나는 일반 클래스가 있으며 인스턴스의 멤버를 설정하려고합니다.

미리 감사드립니다.

+2

항상 자산입니까? 또한 obj를 참조로 전달하는 이유는 무엇입니까? – Ani

+0

나는 myclass 객체 obj을 가지고 있고 mymember를 5로 설정하고 싶다. MySetterClass을 다른 방식으로 만들 수 있는가? 그것은 항상 재산이며, 다른 방법으로 수행 될 수 있다면, 나는 그것들을 듣고 싶습니다. :) – Kubi

+0

Reflection 코드는 일반적인지 여부에 관계없이 동일합니다. – Gabe

답변

0

할 수는 있지만, 경고 할 수는 있습니다. 당신은 본질적으로 형식 안전 시스템에 대한 최종 실행을하고 있습니다. 거기에는 많은 함정이 있습니다. 예, 당신이 할 수있는

typeof(T).GetProperty(membername).SetValue(obj, o); 
+2

'typeof (T)'대신'obj.GetType()'을 사용할 수 있습니다. 일반인 경우 중요하지 않습니다. – Gabe

+0

물론 동의합니다. –

0

:

당신이해야하는 경우는, 코드는 문제의 구성원이 재산이 아닌 필드라고 가정하면,이 같은 것입니다. 그러나 반성없이 그것을 할 수 있다면 반사가 느리고 성 가시고 읽기가 더 어렵고 디자인에 결함이 있음을 나타낼 수 있기 때문에 가장 좋습니다.

이 코드의 궁극적 인 목표는 무엇입니까? 그 멤버의 이름을 나타내는 문자열을 기반으로 멤버를 설정하는 메서드를 정말로 갖고 싶습니까? 또는 제네릭 형식으로 멤버를 설정할 수 있지만 컴파일 타임에 멤버를 알 수 있습니까? 후자라면 generic constraints을 사용하면 조사할만한 가치가 있습니다. 그것들은 컴파일러가 컴파일 할 때 제네릭 타입의 객체에있는 멤버를 알 수있게합니다.

관련 문제