EnumConverter构造函数如何获取类型参数

时间:2014-02-04 13:59:29

标签: c# constructor parameter-passing typeconverter

如果我创建一个用于自定义显示枚举的类,如下所示:

public class MyEnumConverter : EnumConverter
{
    public MyEnumConverter(Type type) : base(type)
    {
    }
    public override object ConvertTo(...)
    public override object ConvertFrom(...)
}

当我使用MyEnumConverter TypeConverter标记枚举作为[TypeConverter(typeof(MyEnumConverter))] public enum MyEnum { SomeValue, OtherValue }

EnumConverter

它按预期工作。 TypeConverter构造函数如何接收表示枚举类型的the required type parameterEnumConverter知道如何专门处理TypeConverter并为我填写此内容吗?这种语法糖是否会在背景中发生?这种行为是否可以自定义,如果我想为自定义TypeConverter实现参数化构造函数,我可以通知{{1}}如何处理我的自定义构造函数?

1 个答案:

答案 0 :(得分:1)

看起来,在内部,TypeConverter使用复杂的嵌套if语句处理所需转换器的采购。类似于(source):

    internal static TypeConverter GetCoreConverterFromCustomType(Type type)
    {
        TypeConverter typeConverter = null;
        if (type.IsEnum)
        {
            // Need to handle Enums types specially as they require a ctor that
            // takes the underlying type.
            typeConverter = new System.ComponentModel.EnumConverter(type);
        }
        else if (typeof(Int32).IsAssignableFrom(type))
        {
            typeConverter = new System.ComponentModel.Int32Converter();
        }
        else if (typeof(Int16).IsAssignableFrom(type))
        {
            typeConverter = new System.ComponentModel.Int16Converter();
        }
        //...

从第一个if语句中,您可以看到它知道将特殊的Type参数传递给构造函数。

作为对第二个问题的回答,我是否可以使用自定义参数化构造函数创建自定义TypeConverter,该构造函数可以与TypeConverter很好地配合使用,但这看起来很可疑。