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

本文关键字:句柄 成员 实例化 获取 | 更新日期: 2023-09-27 18:13:49

这个问题与这个问题有关联(但不是重复)。考虑到我对c#相当陌生。如果可能的话,我希望采用尚未实例化的对象成员的句柄,以便稍后使用它。根据上一个问题,我想做如下操作

List<Action<YourClass>> lst = new List<Action<YourClass>>;
lst.Add(x => x.Member1);
lst.Add(x => x.Member2);

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

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

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

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

否则你的Add将被NullReference-Exception打破。你在添加中使用的是匿名函数,因为句柄没有保存。如果你想存储这个,你需要一个委托。在这个委托上,你可以调用invoke - method来调用它。您可以创建您的on委托以及使用预定义的动作。

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

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

注意使用的var关键字。它检测new Action的结果并取this的类型。在本例中,它保存Action.

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

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

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

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

Vector a= getVect(someObj)