gpt4 book ai didi

c# - 在存储对象中调用方法

转载 作者:太空宇宙 更新时间:2023-11-03 17:54:28 25 4
gpt4 key购买 nike

我对 atm 有点困惑,我不认为这会这么难,因为我一定是做错了什么。在过去的两天里,我现在想做的是访问存储在列表中的对象内部的方法,但我无法访问它。在我看来,应该只是让对象恢复到其原始类型并调用该方法,但我就是做不到。

我已经阅读了很多关于类型、泛型和反射的资料,但它无法发挥任何作用,所以我显然做错了,我需要帮助找到光明!

这是我试过的最新代码

            Object customer = Hotel.Main.Manager.GetMainList(x);
Type frsttype = customer.GetType();
MethodInfo method = frsttype.GetMethod("GetCustomerSpecificData");
MethodInfo generic = method.MakeGenericMethod(frsttype);
String str = generic.Invoke(method);

我想要达到的是对象内部的这个方法:

            public override string GetCustomerSpecificData()
{
string strout = string.Format("{0,-5}{1,26}{2,28}{3,28}\a", ID, Name, Age, Gender);

string strInfo = Extra;
strout += (string.IsNullOrEmpty(strInfo) ? string.Empty : strInfo);

if (m_specialoffer)
{
strout += string.Format("\nSpecial Offer");
}
if (IsRegularCustomer)
{
strout += (IsDangerus ? "\nIs a regular customer " : "\nIs not a regular customer.");
}
strout += Environment.NewLine + PaymentInfo();
strout += (m_CarPark ? "\nHas car parked in garage." : "\nDoes not have car parked in garage.");
return strout;
}

我希望有人能给我指出正确的方向,因为我认为我对这个没有任何进展:/

任何帮助和提示将不胜感激!!!所有的回复都会被点赞!

问候

最佳答案

这里有几件事你需要做,首先让我们看看你发布的代码

您需要问自己的第一个问题是我是否需要使用反射,我可以改为使用接口(interface)或返回我知道的类型吗?

您可以控制 GetMainList(x) 吗?如果是这样,您能否更改它以便它返回比对象更有用的东西?

Object customer = Hotel.Main.Manager.GetMainList(x);

你能转换到任何东西吗?

其次,您的目标方法不是通用方法,因此下面的行将不起作用。

MethodInfo generic = method.MakeGenericMethod(frsttype);

您还错误地调用了该方法,您 Invoke 有两个参数,第一个是您希望对其调用该方法的目标对象以及您可以传递给它的参数。

Invoke(object obj, object[] parameters)

要调用您的方法,您需要执行以下操作。

Object customer = Hotel.Main.Manager.GetMainList(x);
Type frsttype = customer.GetType();
MethodInfo method = frsttype.GetMethod("GetCustomerSpecificData");
String str = method.Invoke(customer, null) as string;

stackoverflow 上有一些很棒的问题和社区维基,当然 MSDN 库中有很多教程和示例。

可以在下面找到有关在 .net 中进行反射的不错的教程。

关于c# - 在存储对象中调用方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15309522/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com