コード例 #1
0
        IEnumerable <IMethod> GetConstructorsImpl(Predicate <IMethod> filter)
        {
            bool foundCtor = false;

            foreach (IMethod m in this.Methods)
            {
                if (m.IsConstructor && !m.IsStatic)
                {
                    foundCtor = true;
                    if (filter == null || filter(m))
                    {
                        yield return(m);
                    }
                }
            }

            if (this.AddDefaultConstructorIfRequired)
            {
                if (kind == TypeKind.Class && !foundCtor && !this.IsStatic ||
                    kind == TypeKind.Enum || kind == TypeKind.Struct)
                {
                    var m = DefaultMethod.CreateDefaultConstructor(this);
                    if (filter == null || filter(m))
                    {
                        yield return(m);
                    }
                }
            }
        }
コード例 #2
0
        public virtual IEnumerable <IMethod> GetConstructors(ITypeResolveContext context, Predicate <IMethod> filter = null)
        {
            ITypeDefinition compound = GetCompoundClass();

            if (compound != this)
            {
                return(compound.GetConstructors(context, filter));
            }

            List <IMethod> methods = new List <IMethod>();

            AddFilteredRange(methods, this.Methods.Where(m => m.IsConstructor && !m.IsStatic), filter);

            if (this.AddDefaultConstructorIfRequired)
            {
                if (this.ClassType == ClassType.Class && methods.Count == 0 ||
                    this.ClassType == ClassType.Enum || this.ClassType == ClassType.Struct)
                {
                    var m = DefaultMethod.CreateDefaultConstructor(this);
                    if (filter == null || filter(m))
                    {
                        methods.Add(m);
                    }
                }
            }
            return(methods);
        }
コード例 #3
0
 public IEnumerable <IMethod> GetConstructors(ITypeResolveContext context, Predicate <IMethod> filter = null)
 {
     if (HasDefaultConstructorConstraint || HasValueTypeConstraint)
     {
         DefaultMethod m = DefaultMethod.CreateDefaultConstructor(GetDummyClassForTypeParameter());
         if (filter(m))
         {
             return new [] { m }
         }
         ;
     }
     return(EmptyList <IMethod> .Instance);
 }
コード例 #4
0
 public IEnumerable <IMethod> GetConstructors(ITypeResolveContext context, Predicate <IMethod> filter = null, GetMemberOptions options = GetMemberOptions.IgnoreInheritedMembers)
 {
     if ((options & GetMemberOptions.IgnoreInheritedMembers) == GetMemberOptions.IgnoreInheritedMembers)
     {
         if (HasDefaultConstructorConstraint || HasValueTypeConstraint)
         {
             DefaultMethod m = DefaultMethod.CreateDefaultConstructor(GetDummyClassForTypeParameter());
             if (filter(m))
             {
                 return new [] { m }
             }
             ;
         }
         return(EmptyList <IMethod> .Instance);
     }
     else
     {
         return(GetMembersHelper.GetConstructors(this, context, filter, options));
     }
 }