首页 > 试题广场 >

定义以下泛型: Internal sealed class

[单选题]
定义以下泛型: 
Internal sealed class DictionaryStringKey:Dictionary{} 
哪个选项不会抛出异常()
  • Type t=typeof(Dictionary<,>);
      Object o=Activator.CreateInstance(t);
  • Type t=typeof(DictionaryStringKey<>);
      Object o=Activator.CreateInstance(t);
  • Type t=typeof(DictionaryStringKey<Guid>);
      Object o=Activator.CreateInstance(t);
复制楼上的解释:具有泛型类型参数的类型称之为:开放类型(open type),CLR禁止构造开发类型的任何实例。这一点类似于CLR禁止构造结构类型的实例。 代码引用一个泛型类型时,可指定一组泛型类型实参,假如所有类型实参传递的都是实际数据类型,类型就称为封闭类型(closed type)。CLR允许构造封闭类型的实例
发表于 2018-02-12 22:26:43 回复(0)
选C 在.NET中,CLR会为应用程序使用的每个类型创建一个内部数据结构,这种数据结构成为:类型对象(type Object)。 具有泛型类型参数的类型仍然是类型,CLR同样会为它创建一个内部类型对象。无论是引用类型(类)、值类型(结构)、接口类型,还是委托类型,这一点都是成立的。然而,具有泛型类型参数的类型称之为:开放类型(open type),CLR禁止构造开发类型的任何实例。这一点类似于CLR禁止构造结构类型的实例。 代码引用一个泛型类型时,可指定一组泛型类型实参,假如所有类型实参传递的都是实际数据类型,类型就称为封闭类型(closed type)。CLR允许构造封闭类型的实例,然而,当代码引用一个泛型类型的时候,可能会留下一些泛型类型实参未指定,这会在CLR中创建一个新的开放类型的对象,而且不能创建该类型的实例,以下代码说明了这一点  internal sealed class DictionaryStringKey<TValue> : Dictionary<String, TValue> { }      public static class Program    {        static void Main(string[] args)        {            Object o = null;              //Dictionary<,>是一个开放类型,它有两个类型参数            Type t = typeof(Dictionary<,>);            //尝试创建该类型的一个实例失败            o = CreateInstance(t);            Console.WriteLine();              //DictionaryStringKey是一个开放类型,他有一个类型参数            t = typeof(DictionaryStringKey<>);            //尝试创建该类型的一个实例失败            o = CreateInstance(t);            Console.WriteLine();              //DictionaryStringKey<Guid>是一个封闭类型            t = typeof(DictionaryStringKey<Guid>);            //尝试创建该类型的一个实例成功            o = CreateInstance(t);            //证明它确实能够工作            Console.WriteLine(" 对象类型:"+o.GetType());        }          private static Object CreateInstance(Type t) {            Object o = null;            try            {                o = Activator.CreateInstance(t);                Console.WriteLine("已创建{0}的实例。",t.ToString());            }            catch (ArgumentException e)            {                Console.WriteLine(e.Message);            }            return o;        }    }
发表于 2017-03-06 21:22:24 回复(0)
在.NET中,CLR会为应用程序使用的每个类型创建一个内部数据结构,
这种数据结构成为:类型对象(type Object)。 
具有泛型类型参数的类型仍然是类型,CLR同样会为它创建一个内部类型对象。
无论是引用类型(类)、值类型(结构)、接口类型,还是委托类型,这一点都是成立的。
然而,具有泛型类型参数的类型称之为:开放类型(open type),
CLR禁止构造开发类型的任何实例。这一点类似于CLR禁止构造结构类型的实例。 
代码引用一个泛型类型时,可指定一组泛型类型实参,
假如所有类型实参传递的都是实际数据类型,类型就称为封闭类型(closed type)。
CLR允许构造封闭类型的实例,然而,当代码引用一个泛型类型的时候,
可能会留下一些泛型类型实参未指定,
这会在CLR中创建一个新的开放类型的对象,而且不能创建该类型的实例,以下代码说明了这一点。 

internal sealed class DictionaryStringKey<TValue> : Dictionary<String, TValue> { }      
public static class Program    
{        
    static void Main(string[] args)        
    {            
    Object o = null;              //Dictionary<,>是一个开放类型,它有两个类型参数            
    Type t = typeof(Dictionary<,>);            //尝试创建该类型的一个实例失败            
    o = CreateInstance(t);            
    Console.WriteLine();              //DictionaryStringKey是一个开放类型,他有一个类型参数            
    t = typeof(DictionaryStringKey<>);            //尝试创建该类型的一个实例失败           
    o = CreateInstance(t);            
    Console.WriteLine();              //DictionaryStringKey<Guid>是一个封闭类型           
    t = typeof(DictionaryStringKey<Guid>);            //尝试创建该类型的一个实例成功            
    o = CreateInstance(t);            //证明它确实能够工作            
    Console.WriteLine(" 对象类型:"+o.GetType());  
    } 
         
    private static Object CreateInstance(Type t) 
    {            
        Object o = null;            
        try            
        {                
            o = Activator.CreateInstance(t);               
            Console.WriteLine("已创建{0}的实例。",t.ToString());
        }            
        catch (ArgumentException e)            
        {               
         Console.WriteLine(e.Message);            
        }           
      return o;        
    }    
 }

编辑于 2019-05-14 10:08:31 回复(0)
题目表示没看懂。。
发表于 2022-03-11 14:38:06 回复(0)
https://docs.microsoft.com/en-us/dotnet/api/system.type.containsgenericparameters?view=net-5.0#:~:text=If%20the%20ContainsGenericParameters%20property%20returns%20true%2C%20the%20type,even%20though%20the%20array%20is%20not%20itself%20generic.
泛型不能被初始化

            // 异常
            // Cannot create an instance of System.Collections.Generic.Dictionary`2[TKey,TValue]
            // because Type.ContainsGenericParameters is true.
            // Type t = typeof(Dictionary<,>);
            // Object o = Activator.CreateInstance(t);

            // 异常
            // 错误原因同上
            // Type t = typeof(DictionaryStringKey<>);
            // Object o = Activator.CreateInstance(t);

            Type t = typeof(DictionaryStringKey<Guid>);
            Object o = Activator.CreateInstance(t);


发表于 2021-03-28 21:34:56 回复(0)
题目没有声明DictionaryKey是泛型类啊
发表于 2019-06-16 09:08:50 回复(0)
原谅我不会.NET
发表于 2019-03-09 15:28:50 回复(0)
感觉 这题出的好不严谨啊
发表于 2019-02-21 18:47:23 回复(0)
有个问题,为什么DictionaryStringKey就是一个参数,就因为名字吗。这是不是有点不严谨了。。。
发表于 2018-06-04 19:31:10 回复(1)