여러 게시물을 읽었지만 내 문제에 대해 적절한 대답을 찾지 못했습니다. 하지만 하나가 있어야합니다. 이 게시물이 실제로 중복되면 제발 기다려주세요.일반 유형의 속성 초기화
제네릭 형식을 구현하는 제네릭 형식의 속성을 초기화하려고합니다.
내 인터페이스는 다음과 같이 기본적으로 같습니다
public interface IMyInterface<TType> : IMyInterface
{
TType Value {get; set;}
// ... and some more ...
}
public interface IMyInterface
{
SetValue(string value);
}
내가 값을 설정해야 할 코드의 조각에 그들을 을 모른 채 IMyInterface
을 구현하는 여러 클래스가 있습니다.
속성의 이름을 사용하지 않고 "값"- 속성을 초기화 할 수 있습니까? (?이 할 수있는 "좋은"방법이 있나요) -이되어 불가능 사전에 SetValue< TType >
void SetValue(object obj, string value)
{
// object obj implements IMyInterface<???>
PropertyInfo valueInfo = typeof(obj).GetType().GetProperty("Value")
valueInfo.SetValue(obj, Activator.CreateInstance(valueInfo.PropertyType))
((IMyInterface)obj).SetValue(value);
}
감사를 사용 할 수 있습니다.
편집 : - 제거 -
편집 2 :
는이 구조가 주어진다 :
public Interface IGeneric<TType> : INonGeneric
{
TType Value2 {get;}
}
public Interface INonGeneric
{
object Value1 {get;}
}
반사에서 "값 1"을 사용하여 정말 간단합니다 :
INonGeneric myObject = (INonGeneric)givenObject;
doSomething(myObject.Value1)
경우 "Value2"에 액세스해야합니다. 쉽지 않습니다. 첫 번째 예제에서 볼 수 있듯이 속성 이름이 하드 코드되어 있기 때문에 "Value2"에 액세스하는 가장 좋은 방법 인 것 같지 않은 다음 구문을 사용해야했습니다.
PropertyInfo valueInfo = givenObject.GetType().GetProperty("Value2");
object value = (object)valueInfo.GetValue(givenObject);
더 좋은 해결책이 있습니까?
경우는 어떻게? –
나는 당신이 무엇을 요구하고 있는지 이해하지 못합니다. 'TType'이'string'이 아닌 경우, 수행해야 할 코드는 무엇입니까? 객체가'IMyInterface'이 아닌'IMyInterface' 만 구현하고 있다면 어떻게해야할까요? 그리고 무엇을 _specifically_ "초기화"한다는 의미입니까? 귀하의 코드 예제는 속성을 일부 기본값/인스턴스로 설정하려고 시도하지만 유형에 매개 변수없는 생성자가없는 경우에는 어떻게됩니까? 나는 당신이 문제를 유익한 방법으로 표현할 수있는 방법을 찾아 낼 수 있다고하더라도 "당신의 문제에 대한 해답이 있어야한다"는 것에 동의하지 않습니다. 일부 문제는 해결할 수 없습니다 (정당한 이유가 있음). –
'IMyInterface'을 구현하는 클래스가 생성자를 사용하여 값을 초기화하지 않아서 Unity 클래스의 IOC 라이브러리를 통해 자동으로 수행 할 수있는 생성자 삽입도 가능합니다. –
Saravanan