如何使用c#引用初始化程序中初始化的对象?

时间:2011-10-24 15:56:46

标签: c#

假设我有一个类似于以下内容的对象初始值设定项:

var coolObject = new CoolObject()
{
    GetObjectState = () => coolObject.InternalState;
}

其中GetObjectState是CoolObject上的一个函数,它返回某种对象状态。在这种情况下,我希望该函数简单地返回coolObject的内部状态对象。代码对象显然不会编译,因为在声明它之前你不能引用局部变量。

有解决方法吗?是否有类似于初始化器的“this”关键字?

4 个答案:

答案 0 :(得分:3)

CoolObject coolObject = null;
coolObject = new CoolObject()
{
    GetObjectState = () => coolObject.InternalState;
}

虽然如果coolObject的值在调用之前发生变化,这段代码就不安全了。

答案 1 :(得分:2)

你不能只删除{},即错误:

var coolObject = new CoolObject();
coolObject.GetObjectState = () => coolObject.InternalState;

答案 2 :(得分:1)

阐述我的评论:没有理由使用这种方法。将GetObjectState定义为实际方法而不是Func<TypeOfInternalState>,几乎肯定会更好:

public TypeOfInternalState GetObjectState() { return this.InternalState }

现在不需要编译器提升局部变量,也没有必要使用奇怪的构造语法来引用当前正在构造的对象的变量。

答案 3 :(得分:1)

怎么样:

public class CoolObject
{
    public CoolObject()
    {
        GetObjectState = () => this.InternalState;
    }

    public Func<InternalState> GetObjectState;
}

您可以覆盖心脏的内容,默认状态适用于大多数情况。