c# - 我可以在构造函数调用中将对象的状态设置为对象本身吗?

标签 c# constructor

我正在使用一个预构建的第三方类库(想想 .NET Framework...),它包含一个类 Foo,其成员如下:

public sealed class Foo {
  private object _state;
  public Foo(object state) { _state = state; }
}

Foo 包含public _state setter 。

在特定场景中,我想将Foo 对象的状态 设置为对象本身。

这将编译:

Foo f;
f = new Foo(f);   // Compilation error: Use of unassigned local variable 'f'

鉴于上述先决条件,是否有任何方法可以将 Foo 对象的状态设置为对象本身?


基本原理 Windows 8.1 中的 Timer 类不包含分配 Timer 状态的 Timer(AsyncCallback) 构造函数 对象与对象本身。我正在尝试将包含此 Timer 构造函数的 .NET 代码移植到 Windows 8.1 类库,所以我关心的是如何将对象本身传递给它的状态成员?此问题进一步概述 here , 但我认为也提出上面的主要问题会更有效率。

最佳答案

解决方法:

var foo = new Foo(/*params*/);
var fieldInfo = foo.GetType().GetField("_state", BindingFlags.NonPublic | BindingFlags.Instance);
fieldInfo.SetValue(foo , foo);

关于c# - 我可以在构造函数调用中将对象的状态设置为对象本身吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19705660/

相关文章:

c# - LINQ - groupBy 与几个组中的项目

c# - 如何在我的 C# Visual Studio 项目中添加 VC++ DLL 作为引用?

java - 在构造函数中创建具有数组特征的数据结构

C++ 创建和使用类

c# - 用作另一个 IdentityServer 的外部身份提供者的 IdentityServer 无法正确重定向

c# - CanBeNull 和 ReSharper - 将它与异步任务一起使用?

c# - wcf - MaxConcurrentCalls 和 MaxConcurrentSessions 属性之间的区别

c++ - 无法访问 C++ 中全局变量的构造函数中的静态(非原始)成员

c# - 如何重构具有重载构造函数的类

constructor - Java:为什么 "Character newChar = ' c' "work if Character is a wrapper class? How come it doesn' t 需要构造函数?