C# 컴파일러 오류 CS1061을 조사했지만이 코드에서 생성 된 오류를 해결하는 방법을 모르겠습니다. 제네릭 형식을 사용하는 범용 TypeConverter 클래스를 디자인하려고합니다.범용 C# TypeConverter를 구현하는 방법은 무엇입니까?
먼저 확장 가능한 속성으로 사용할 클래스를 정의합니다. TypeConverter가 호출 할 정적 메서드 'ConvertFromString'이 있습니다.
[TypeConverter(typeof(MyClassConverter))]
public class MyClass
{
...
public static MyClass ConvertFromString(string s, MyClass OldValue)
{
...
}
}
나는이 같은 TypeConverter를 정의하고 싶습니다,이 범용 MyClassConverter도 정적 ConvertFromString 방법을 제공하는 다른 클래스에서 사용할 수 있도록하는 것이
public class MyClassConverter<T> : ExpandableObjectConverter
{
...
public override object ConvertFrom(ITypeDescriptorContext context,
CultureInfo culture, object value)
{
GridItem gridItem = context as GridItem;
object itemValue = gridItem == null ? null : gridItem.Value;
if (value is string)
return typeof(T).ConvertFromString((string)value, (T)itemValue);
return base.ConvertFrom(context, culture, value);
}
}
.
내 문제는 (지금까지)
return typeof(T).ConvertFromString((string)value, (T)itemValue);
는 컴파일러 오류 CS1061을 생성, 코드 줄 것입니다. 나는 그것을 어떻게 고쳐야하는지 잘 모르겠다.
사이드 참고 :
- 인가 : 난 단지
내 질문 T.을 지정하려면이
if (value is string && typeof(T) == typeof(MyClass)) return MyClass.ConvertFromString((string)value, (MyClass)itemValue);
, 오류없이 컴파일하지만 MyClass에를 지정하지 않으 방법은 T를 사용하여 정적 메서드 ConvertFromString을 호출하는 방법?
- Can # 1은 ConvertFromString을 정적으로 활용할 수 있습니까?
- T 타입의 객체를 미리 생성하지 않고 # 2 할 수 있습니까?
현재 저는 여러 가지 사용자 정의 TypeConverter 클래스 (generics를 사용하지 않음)가 있습니다. 다른 유일한 코드 행은 ConvertFromString을 호출 한 것입니다. 각 사용자 지정 TypeConverter에서 ConvertFromString은 변환하는 적절한 클래스 이름으로 명시 적으로 하드 코드됩니다. 이 모든 사용자 지정 변환기 클래스를 하나의 범용 변환기 클래스로 바꿀 수 있다면 얼마나 좋겠습니까.
- 이것은 가능합니까?
- 누락 된 지식이 있습니까?
(이 솔루션은 .NET 3.5 이전 버전과 호환 가능해야합니다.)
http://stackoverflow.com/questions/3384976/calling-a-static-method-using-a-type –
@AlexKrupka - 감사합니다! MethodInfo 클래스와 GetMethod()를 살펴볼 것이다. – dathompson