System.Security.Cryptography.CryptoConfig.CreateFromName C# (CSharp) Метод

CreateFromName() публичный статический Метод

public static CreateFromName ( string name ) : object
name string
Результат object
        public static object CreateFromName(string name, params object[] args)
        {
            if (name == null)
                throw new ArgumentNullException(nameof(name));

            Type retvalType = null;

            // We allow the default table to Types and Strings
            // Types get used for types in .Algorithms assembly.
            // strings get used for delay-loaded stuff in other assemblies such as .Csp.
            object retvalObj;
            if (DefaultNameHT.TryGetValue(name, out retvalObj))
            {
                if (retvalObj is Type)
                {
                    retvalType = (Type)retvalObj;
                }
                else if (retvalObj is string)
                {
                    retvalType = Type.GetType((string)retvalObj, false, false);
                    if (retvalType != null && !retvalType.IsVisible)
                    {
                        retvalType = null;
                    }
                }
                else
                {
                    Debug.Fail("Unsupported Dictionary value:" + retvalObj.ToString());
                }
            }

            // Maybe they gave us a classname.
            if (retvalType == null)
            {
                retvalType = Type.GetType(name, false, false);
                if (retvalType != null && !retvalType.IsVisible)
                {
                    retvalType = null;
                }
            }

            // Still null? Then we didn't find it.
            if (retvalType == null)
            {
                return null;
            }

            // Locate all constructors.
            MethodBase[] cons = retvalType.GetConstructors(ConstructorDefault);
            if (cons == null)
            {
                return null;
            }

            if (args == null)
            {
                args = new object[] { };
            }

            List<MethodBase> candidates = new List<MethodBase>();
            for (int i = 0; i < cons.Length; i++)
            {
                MethodBase con = cons[i];
                if (con.GetParameters().Length == args.Length)
                {
                    candidates.Add(con);
                }
            }

            if (candidates.Count == 0)
            {
                return null;
            }

            cons = candidates.ToArray();

            // Bind to matching ctor.
            object state;
            ConstructorInfo rci = Type.DefaultBinder.BindToMethod(
                ConstructorDefault,
                cons,
                ref args,
                null,
                null,
                null,
                out state) as ConstructorInfo;

            // Check for ctor we don't like (non-existant, delegate or decorated with declarative linktime demand).
            if (rci == null || typeof(Delegate).IsAssignableFrom(rci.DeclaringType))
            {
                return null;
            }

            // Ctor invoke and allocation.
            object retval = rci.Invoke(ConstructorDefault, Type.DefaultBinder, args, null);

            // Reset any parameter re-ordering performed by the binder.
            if (state != null)
            {
                Type.DefaultBinder.ReorderArgumentArray(ref args, state);
            }

            return retval;
        }

Usage Example

Пример #1
0
 /// <summary>
 /// Создание объекта, реализуещего алгоритм шифрования ГОСТ-28147.
 /// </summary>
 ///
 /// <returns>Криптографический объект, реализующий алгоритм ГОСТ
 /// 28147.</returns>
 ///
 /// <remarks><para>Создание объекта алгоритма шифрования ГОСТ 28147.
 /// Объект может использоваться
 /// для симметричного зашифрования и расшифрования.</para></remarks>
 ///
 ///// <doc-sample path="Simple\Encrypt" name="EncryptDecryptRandomFile"
 ///// region="EncryptDecryptRandomFile">Пример зашифрования и
 ///// расшифрования файла при помощи
 /////  порожденного класса <see cref="Gost28147CryptoServiceProvider"/>.
 /////  </doc-sample>
 public new static Gost28147 Create()
 {
     // Создание объекта идет по конфигурации для алгоритма заданного
     // полным именем класса Gost28147.
     return((Gost28147)CryptoConfig.CreateFromName(typeof(Gost28147).Name));
 }
All Usage Examples Of System.Security.Cryptography.CryptoConfig::CreateFromName