На C#: проходя которые можно вывести класс тип в метод в качестве параметра
Идея
В следующем коде используется перегруженный метод, который ожидает базовый класс или конкретный деривированный класс в качестве параметра.
Проблема
Проблема в том, что
FieldTypeBase field = new TextFieldType();передается как тип FieldTypeBase и звонит Метода Dowork(Упорядочивания По Результатам Вычисления.FieldTypeBase ...)
пока
var field = new TextFieldType();передается как Свойства textfieldtype и звонит Метода Dowork(Упорядочивания По Результатам Вычисления.Свойства textfieldtype...).
Вопрос:
Есть какие-нибудь идеи, чтобы убедиться, что вызывается "правильный" метод?
Замечание:
Я знаю, что этот код немного пахнет, и, вероятно, будет делать рефакторинг, чтобы реализовать рабочий непосредственно на полях. Но на самом деле я пытаюсь решить именно этот пример.
Что я уже пробовал:
namespace InternalFieldTest
{
using System.Collections.Generic;
using FieldTypes;
public static class Tests
{
public static IEnumerable<string> TestWorker()
{
FieldTypeBase field1 = new TextFieldType();
TextFieldType field2 = new TextFieldType();
// failed: DoWork[error:NoWorkerDefined]
yield return FieldProcessors.DoWork(field1);
//ok: DoWork[TextFieldType]
yield return FieldProcessors.DoWork(field2);
// ok: DoWork[error:NoWorkerDefined]
yield return FieldProcessors.DoWork(new UnknownFieldType());
}
}
public static class FieldProcessors
{
public static string DoWork(TextFieldType fieldType) => "DoWork[TextFieldType]";
public static string DoWork(FieldTypeBase fieldType) => "DoWork[error:NoWorkerDefined]";
}
namespace FieldTypes
{
public abstract class FieldTypeBase { }
public class TextFieldType : FieldTypeBase { }
public class UnknownFieldType : FieldTypeBase { }
}
}