Exemple #1
0
        internal TypeCrawler()
        {
            _type = typeof(T);

            _constructors = new Lazy <IConstructor[]>(
                () =>
                _type.GetConstructors(
                    BindingFlags.Public
                    | BindingFlags.NonPublic
                    | BindingFlags.Instance)
                .Where(c => c.GetParameters().All(p => !p.ParameterType.IsPointer))
                .Select(Constructor.Get)
                .ToArray());

            _fields = new Lazy <IField[]>(
                () =>
                _type.GetFields(
                    BindingFlags.Public
                    | BindingFlags.NonPublic
                    | BindingFlags.Instance
                    | BindingFlags.Static)
                .Where(f => !f.FieldType.IsPointer)
                .Select(Field.Get)
                .ToArray());

            _properties = new Lazy <IProperty[]>(
                () =>
                _type.GetProperties(
                    BindingFlags.Public
                    | BindingFlags.NonPublic
                    | BindingFlags.Instance
                    | BindingFlags.Static)
                .Where(p => !p.PropertyType.IsPointer)
                .Select(Property.Get)
                .ToArray());

            _methods = new Lazy <IMethod[]>(
                () =>
                _type.GetMethods(
                    BindingFlags.Public
                    | BindingFlags.NonPublic
                    | BindingFlags.Instance
                    | BindingFlags.Static)
                .Where(p => !p.ReturnType.IsPointer && p.GetParameters().All(param => !param.ParameterType.IsPointer))
                .Select(Method.Get)
                .ToArray());

            _members = new Lazy <IMember[]>(
                () =>
                Constructors.Cast <IMember>()
                .Concat(Fields)
                .Concat(Properties)
                .Concat(Methods)
                .ToArray());

            _fieldMap    = new Lazy <IDictionary <string, IField> >(() => Fields.ToDictionary(f => f.Name));
            _propertyMap = new Lazy <IDictionary <string, IProperty> >(() => Properties.ToDictionary(p => p.Name));
        }