获取尚未实例化的 class 成员的句柄

Get the handle of a member of a class that has no instantiation yet

此问题与 相关(但不重复)。考虑到我是 C# 的新手。 如果可能的话,我想获取尚未实例化 jet 的对象成员的句柄,以便稍后使用它。根据上一个问题,我想做一些类似的事情

List<Action<YourClass>> lst = new List<Action<YourClass>>;

lst.Add(x => x.Member1);
lst.Add(x => x.Member2);

Member1 和 Member2 不应是静态成员,因为它们的值取决于它们所属对象的状态。基本上我想要它们 "name" 的句柄,以便稍后在实例化对象时可以使用它。我在考虑一种基于字符串的方法,其值是成员名称,但也许有更好的方法? 谢谢。

我不确定我是否理解正确。首先,您需要从列表中创建一个实例。

List<Action<YourClass>> lst = new List<Action<YourClass>>;

否则您的添加将因 NullReference-Exception 而中断。您在 Add 中使用的称为 anonymus 函数,因为句柄未保存。如果你想存储它,你需要一个 delegate。在此委托上,您可以调用 Invoke-Methode 来调用它。您可以创建自己的代表,也可以使用预定义的动作。

这是一个没有任何意义的小例子,但可能会澄清:

    var action = new Action<string>(x => x = x.Substring(1, 1));
    //Do some other stuff
    action.Invoke("Hallo");

请注意,使用了 var 关键字。它检测新 Action 的结果并采用此类型。在本例中,它包含 Action.

进一步注意,Action 是一个预定义的委托。另一个是 Func,它有一个 return 值。如果您需要其他行为,您可以轻松地创建自己的委托。为此,您应该阅读 link.

感谢 Henk 评论,我找到了解决方案:

Func<myObj, Vector> getVect = new Func<myObj, Vector> 
getVect= (myObj => myObj.objVector);

其中 objVector 不是方法,而是 myObj 的成员。 我这样调用 getVect:

Vector a= getVect(someObj)