gpt4 book ai didi

c# - C# 中的动态转换

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

我有一个名为 Rack 的抽象基类,我有不同类型的机架,它们是 Rack 的子类。我希望能够将通用 C# 对象动态地转换为 Rack 类的不同子级,以便调用正确的 getData 方法,所有子级都具有该方法。这是我目前所拥有的。
下面的代码调用了 Rack 基类中的虚方法。我需要它来调用 Rack 的子类中的方法。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Reflection;

namespace IO_Interface
{
class Channel
{
private object rack1;
private object rack2;
public Channel()
{

}

public Channel(object h1, object h2)
{
rack1 = h1;
rack2 = h2;
}

public void send()
{

Type rack1Info = rack1.GetType();
Type rack2Info = rack2.GetType();
string name = rack1.ToString();

MethodInfo castMethod = rack1.GetType().GetMethod("getData").;
castMethod.Invoke(rack1.GetType(), null);

}

}
}`

最佳答案

您要做的是将 rack1 和 rack2 声明为 Racks,这将是一个具有抽象方法 GetData 的抽象类。您将在某处将它们实例化为 Rack 的子类。然后,当您在 Rack 上调用 GetData 时,它会找到被覆盖的方法并调用它。这是一个例子。

abstract class Rack
{
public abstract void GetData();
}

class ChildRack1 : Rack
{
public override void GetData(){}
}

class ChildRack2 : Rack
{
public override void GetData(){}
}

class Channel
{
private Rack rack1;
private Rack rack2;
public Channel()
{

}

public Channel(Rack h1, Rack h2)
{
rack1 = h1;
rack2 = h2;
}

public void send()
{

rack1.GetData();
}

}

关于c# - C# 中的动态转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18498509/

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