Я портирую некоторый код Delphi на C # в системе, где я могу читать различные типы полей из одного и того же источника.Я хотел бы использовать родительский класс и инкапсулировать все внутренние методы в дочерних классах, чтобы скрыть внутренний и конкретный механизм каждого типа поля.
Я сделал простой пример, чтобы показать, где находится «моя проблема»:
using System;
namespace ConsoleApplication5
{
class Program
{
static void Main(string[] args)
{
ParentField<int> fieldInteger = new MyIntField<int>();
fieldInteger.Value = 12;
ParentField<string> fieldString = new MyStringField<string>();
fieldString.Value = "This is a String";
Console.WriteLine("1. The Integer Value: " + fieldInteger.Value);
Console.WriteLine("1. The String Value: " + fieldString.Value);
int localInteger = fieldInteger.GetRealStrongTypedValue;
string localString = fieldString.GetRealStrongTypedValue;
Console.WriteLine("2. The Integer Value: " + localInteger);
Console.WriteLine("2. The String Value: " + localString);
}
}
public abstract class ParentField<T>
{
public abstract Object Value { get; set; }
public abstract T GetRealStrongTypedValue { get; }
}
public sealed class MyIntField<T> : ParentField<T>
{
public override Object Value
{
get { return valor; }
set { valor = (int)value; }
}
public override T GetRealStrongTypedValue
{
get { return valor; } // ERROR...
}
private int valor;
}
public sealed class MyStringField<T> : ParentField<T>
{
public override Object Value
{
get { return valor; }
set { valor = (string)value; }
}
public override T GetRealStrongTypedValue
{
get { return valor; } // ERROR...
}
private string valor;
}
}
Также я попытался удалить универсальный из дочернего GetRealStrongTypedValue
метода экземпляра следующим образом:
public sealed class MyStringField<T> : ParentField<T>
{
public override Object Value
{
get { return valor; }
set { valor = (string)value; }
}
public new string GetRealStrongTypedValue
{
get { return valor; }
}
private string valor;
}
Но тогда ошибка в том, что я не реализую абстрактный метод из ParentField
Class.
Я пытался изменить ParentField.GetRealStrongTypedValue
на виртуальный, реализуя фальшивый контент, но полиморфизм вообще не запускается и всегда использует точный ParentField.GetRealStrongTypedValue
, поэтому он возвращает фальшивый контент.
Любая простая и умная идея?: -)
Спасибо ...