gpt4 book ai didi

c# - 动态调用对象类

转载 作者:行者123 更新时间:2023-12-02 04:28:56 24 4
gpt4 key购买 nike

如何动态传递该类? (编辑)使用名称字符串调用 =(

我想将 A1 或 A2 传递给 getData 函数

有什么想法或引用可以支持我吗?

public class A1{
public int dataA1 {get;set;}
}

public class A2{
public int dataA2 {get;set;}
}

Type obj= Type.GetType("A2");;

var example = GetData<obj>();

public void GetData<T>(){
//process T custom (A1 or A2) T = A2
}

最佳答案

您应该声明一个基类,ABase (或使用更好的名称),然后使用它作为通用处理的基础:

public class ABase
{
public int data { get; set; }
}

public class A1 : ABase {
... implementation that presumably sets data
}

public class A2 : ABase {
... implementation that presumably sets data
}

var example = GetData<ABase>();

public void GetData<T>() where T : ABase {
// Do something with T which can be A1 or A2 but supports GetData
}

GetData<T> ,您现在可以保证 data A1 均可访问该属性和A2因为它是在基类 ABase 上声明的.

或者,您可以实现定义该属性的接口(interface):

public interface IBase
{
int data { get; set; }
}

public class A1 : IBase {
// Implement the interface here
public int data { get; set; }
}

...

编辑以下@AnuViswan评论

正如 Any Viswan 所指出的,在你的例子中(也是我的例子),GetData<T>不返回任何内容,但 var example设置为该方法的结果。

这无疑是您的示例中的拼写错误。我猜GetData<T>应该返回 int .

关于c# - 动态调用<T>对象类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59411990/

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