今天我觉得制作一个接口类型的匿名对象是很好的,我在SO上看到我不仅仅是一个.
在我开始查看发生了什么之前,我写了一些代码,如下所示.为了我的娱乐它编译,我使用.net框架4,我知道没有办法做匿名对象实现接口,但我还没有看到VS对此代码的投诉.
更好的是,当我把括号intelisense发现我的界面的"属性",就像它是有效的代码.
为什么这篇文章正在编译,何时运行它会给出null引用异常?
namespace test
{
class Program
{
static void Main(string[] args)
{
Holder holder = new Holder { someInterface = { Property = 1 } };
Console.WriteLine(holder.someInterface.Property);
}
}
class Holder
{
public ISomeInterface someInterface{get; set;}
}
interface ISomeInterface
{
int Property { get; set; }
}
}
Run Code Online (Sandbox Code Playgroud)
Sri*_*vel 10
Holder holder = new Holder { someInterface = { Property = 1 } };//<--Note you missed new keyword
Run Code Online (Sandbox Code Playgroud)
上面的行等于
Holder temp = new Holder();
temp.someInterface.Property = 1;
Holder holder = temp;// <--Here someInterface is null so you get null reference exception.
Run Code Online (Sandbox Code Playgroud)
这应该是这样的
Holder holder = new Holder { someInterface = new SomeClass(){ Property = 1 } };//<--Note the new keyword here
Run Code Online (Sandbox Code Playgroud)
注意:您的代码从未引入过"匿名类型"它是一个"对象初始化器".
当您使用带有new关键字的ObjectInitializer语法时,这意味着您正在设置某些内容,当您使用不带new关键字的ObjectInitializer语法时, 这意味着您正在阅读某些内容.
| 归档时间: |
|
| 查看次数: |
165 次 |
| 最近记录: |