gpt4 book ai didi

c# - 在C#中将类的对象作为参数传递

转载 作者:太空宇宙 更新时间:2023-11-03 21:04:29 24 4
gpt4 key购买 nike

我想在 C# 中将类对象作为参数传递,如下所示:

case "Case1":

class obj1 = new class ();

string abc = obj1.calc("100");
break;

case "Case2":

class2 obj2 = new class2 ();

string abc = obj2.calc("100");
break;

所以我不想调用 obj1.calc 和 obj2.calc,而是想将对象 obj1 作为方法参数传递给编写计算逻辑的地方。

public static void ProcessModel(object Model)
{
String abc = <oBJECT>.calc("100");
}

最佳答案

你应该创建一些接口(interface):

public interface ISomeInterface
{
string calc(string str);
}

然后由你的类实现它:

public class Class1 : ISomeInterface
{
//your code
}

public class Class2 : ISomeInterface
{
//your code
}

然后将您的方法 ProcessModel() 更改为:

public static void ProcessModel(ISomeInterface model)
{
String abc = model.calc("100");
}

如果出于某种原因你真的不想使用接口(interface),你可以使用反射。你的类应该有同名的方法:

public static string CallMethodOfSomeObject(object obj, string methodName, params object[] parameters)
{
var type = obj.GetType();
var method = type.GetMethod(methodName, BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Public);

//use this if you use C#6 or higher version
return (string)method?.Invoke(obj, parameters);

//use this if you use C#5 or lower version
if (method != null)
{
return (string)method.Invoke(obj, parameters);
}

return null;
}

还有你的方法 ProcessModel():

public static void ProcessModel(object model)
{
String abc = CallMethodOfSomeObject(model, "calc", "100");
}

此外,考虑将 ProcessModel() 返回类型更改为 string:

public static string ProcessModel(ISomeInterface model)
{
return model.calc("100");
}

//OR

public static string ProcessModel(object model)
{
return CallMethodOfSomeObject(model, "calc", "100");
}

并且在 switch 中的每个 case 调用此方法:

case "Case1":
Class1 obj1 = new Class1 ();
string abc = ProcessModel(obj1);
break;

case "Case2":
Class2 obj2 = new Class2 ();
string abc = ProcessModel(obj2);
break;

关于c# - 在C#中将类的对象作为参数传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42201903/

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