На 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 { } } }