- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我想有人可以回答这个问题,这是出于好奇而提出的问题:
System.Activator
中的通用 CreateInstance
方法在 .NET v2 中引入,对通用参数没有类型限制,但确实需要激活类型的默认构造函数,否则将抛出 MissingMethodException
。对我来说,很明显这个方法应该有一个类型约束,比如
Activator.CreateInstance<T>() where T : new() {
...
}
这里只是一个遗漏还是一些轶事?
更新
如前所述,编译器不允许你这样写
private T Create<T>() where T : struct, new()
error CS0451: The 'new()' constraint cannot be used with the 'struct' constraint
但是,请参阅注释,结构可以用作指定 new() 约束的泛型方法的类型参数。在这种情况下,给出的答案似乎是不限制该方法的唯一正当理由......
感谢您查看此内容!
最佳答案
我可能是错的,但我认为它的主要好处是它允许你做这样的事情:
// Simple illustration only, not claiming this is awesome code!
class Cache<T>
{
private T _instance;
public T Get()
{
if (_instance == null)
{
_instance = Create();
}
return _instance;
}
protected virtual T Create()
{
return Activator.CreateInstance<T>();
}
}
请注意,如果 Activator.CreateInstance<T>
有一个where T : new()
约束,然后是 Cache<T>
上面的类也需要那个约束,自Create
以来这将是过度限制的。是虚方法,一些派生类可能希望使用不同的实例化方法,例如调用类型的内部构造函数或使用静态构建器方法。
关于c# - 琐事多于真正重要 : Why no new() constraint on Activator. CreateInstance<T>()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5187867/
我有以下型号:http://slexy.org/view/s20T8yOiKZ from mxutils.cms_services import generate_secid from django.
我遇到了一个问题..当我用我的程序运行 valgrind 时,我得到了以下输出,这让我很困惑: ==12919== HEAP SUMMARY: ==12919== in use at exit
我有一张产品销售表。每笔销售都有一个项目代码(例如序列号)和一个日期。 item_code | date a | 2013-01-01 a | 2013-01-18 b | 3013-02-10 c
是否可以定义一个不限于 1 个字符的分隔符?基于标题的示例,我想将我的分隔符定义为例如'#+#'。文本文件/行可以包含这两个字符,但您遇到特定子字符串/文本组合的可能性很小。 最佳答案 不可以,您不能
Produce a PDA to recognise the following language : the language of strings containing more a's than
我想做一个程序,想像这样生成一个 process -> n process -> n process 第二级可以使用多处理生成进程吗?使用 python 2.6 的 multiprocessinf 模
我对使用 CNN 进行图像识别非常陌生,目前使用 Keras(VGG 和 ResNet)中提供的几种标准(预训练)架构来执行图像分类任务。我想知道如何将输入 channel 的数量概括为 3 个以上(
我有一个 html 文档,当 URL 长度小于 30 个字符时,我想隐藏其中的一些 id(在本例中为 id="test")。 var test = document.getElementById('t
我有一个以 Qtreewidget(有 3 列)作为中央小部件的主窗口。我想保持第一列和第二列的大小固定,但第二列的大小应等于 qtreewidget 的大小减去其他两列的大小。既然主窗口(也就是树形
我的问题类似于this一。我想知道是否存在一个 PDA,它以随机顺序接受包含 a、b 和 c 的任何单词,其中 a 的总量高于 b 的总量并高于 c 的总量,例如单词“abcacba”将被接受。 最佳
我正在尝试使用准备好的 PDO 语句执行 while 循环,但我只希望它在有任何行时执行。目前我正在使用它,但它似乎缺少第一个结果,大概是因为它移动了指针。 正确的做法是什么? $stmt = $pd
1.实体(表)CurrentyEnitiy.java @Entity(tableName = "Corona") public class CurrentyEntity { @PrimaryKey(a
我是一名优秀的程序员,十分优秀!