У меня есть абстрактный базовый класс под названием Rack, и у меня есть разные типы стеллажей, которые являются дочерними элементами стойки. Я хочу иметь возможность динамически генерировать общий объект C# для разных дочерних элементов класса Rack, чтобы вызвать правильный метод getData, в котором все дети имеют метод. Вот что я до сих пор.
Код ниже вызывает виртуальный метод в базовом классе Rack. Мне нужно, чтобы он вызывал методы в дочерних классах Rack.Dynamic Cast in C#
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' как 'Rack' и напрямую вызовите метод getData'? – Lee
Если это 'virtual', это все равно вызовет. Если это «новый», у вас есть проблема. –
Динамическое литье невозможно на статически типизированном языке, таком как C#. Кажется, вам просто нужен «виртуальный» метод. – Jon