private static string ToClassBase(ClassType baseType, IEnumerable<InterfaceType> interfaces)
        {
            var str = new StringBuilder();
            if (baseType != null) { str.Append(baseType.Name); }

            str.Append(string.Join(",", interfaces.Select(x => x.Name)));
            return str.ToString();
        }
        private static ClassType CreateClassType(TypeInfo typeInfo)
        {
            var parameterTypes = GetParameterTypes(typeInfo);
            var baseType = GetBaseType(typeInfo);
            var interfaceTypes = GetImplementedInterfaceTypes(typeInfo);

            var logicalType = new ClassType(typeInfo.GetNameWithoutArity(), parameterTypes, baseType, interfaceTypes);
            if (!_typeRepository.ContainsKey(typeInfo)) { _typeRepository.Add(typeInfo, logicalType); }

            foreach (var member in GetMembers(typeInfo))
            {
                logicalType.Members.Add(member);
            }

            return logicalType;
        }
 /// <summary>
 /// 
 /// </summary>
 /// <param name="name"></param>
 /// <param name="parameterTypes"></param>
 /// <param name="baseType"></param>
 public ClassType(string name, IEnumerable<ParameterType> parameterTypes, ClassType baseType) : this(name, parameterTypes, baseType, Enumerable.Empty<InterfaceType>()) { }
 /// <summary>
 /// 
 /// </summary>
 /// <param name="name"></param>
 /// <param name="parameterTypes"></param>
 /// <param name="baseType"></param>
 /// <param name="interfaces"></param>
 public ClassType(string name, IEnumerable<ParameterType> parameterTypes, ClassType baseType, IEnumerable<InterfaceType> interfaces) : base(name)
 { 
     ParameterTypes = parameterTypes;
     BaseType = baseType;
     Interfaces = interfaces;
 }
 /// <summary>
 /// 
 /// </summary>
 /// <param name="name"></param>
 /// <param name="baseType"></param>
 public ClassType(string name, ClassType baseType) : this(name, Enumerable.Empty<ParameterType>(), baseType) { }