获取尚未实例化的 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)
此问题与
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)