如何将泛型类型作为强类型类型返回
【腾讯云】亏本大甩卖,服务器4核16G 1年370元(带宽12M,系统盘120GB SSD盘,月流量2000GB)!!!!!!
云产品 配置 价格
服务器 1核2G,带宽5M,系统盘50GB SSD盘,月流量500GB 38元/年
MySQL 1核1G 19元/年
服务器 16核32G,带宽18M,系统盘250GB SSD盘,月流量5000GB 1197元/年
点我进入腾讯云,查看更多详情

I am porting some Delphi code to C# on a system where I can read different kind of fields from the same source. I would like to use a parent class and encapsulate all internal way of do on child classes to hide the internal and concrete mechanism of every field type.

I have done a simple example to show where is "my problem":

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;
    }
}

Also I have tried removing Generic from child GetRealStrongTypedValue instance method, in this way:

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;
}

But then the error is I am not implementing abstract method from ParentField Class.

I have tried to change ParentField.GetRealStrongTypedValue to virtual, implementing fake content, but polymorphism doesn't run at all and always is using the exact ParentField.GetRealStrongTypedValue so it is returning fake content.

Any simple and smart idea ? :-)

Thanks...

#0

I think what you want to do is not make MyStringField generic, but rather make it a type-specific implementation of ParentField<T>.

public sealed class MyStringField : ParentField<string>
{
    public override Object Value
    {
        get { return valor; }
        set { valor = (string)value; }
    }
    public override string GetRealStrongTypedValue
    {
        get { return valor; } // ERROR...

    }

    private string valor;
}

推荐文章

如何复制SQL Server对称密钥?

如何复制SQL Server对称密钥?

推荐文章

数学/物理头的最接近问题

数学/物理头的最接近问题

推荐文章

为什么7zip在制作SFX安装程序时忽略我的InstallPath?

为什么7zip在制作SFX安装程序时忽略我的InstallPath?

推荐文章

UIDatePicker不在核心数据中存储时间

UIDatePicker不在核心数据中存储时间

推荐文章

自定义rand48的上限

自定义rand48的上限

推荐文章

从iPhone上载文件时的进度

从iPhone上载文件时的进度

推荐文章

滚动时在UITableViewCell中错误地重复单元格背景

滚动时在UITableViewCell中错误地重复单元格背景

推荐文章

ps如何显示Mac OS X上所有进程的argv?

ps如何显示Mac OS X上所有进程的argv?

推荐文章

更快的投影范数(二次型,度量矩阵…)式计算

更快的投影范数(二次型,度量矩阵…)式计算

推荐文章

ActiveCollab subversion集成是否与ssh上的subversion一起工作?

ActiveCollab subversion集成是否与ssh上的subversion一起工作?

推荐文章

两阶段查找:我可以避免“代码膨胀”吗?

两阶段查找:我可以避免“代码膨胀”吗?

推荐文章

如何通过聚焦文档来模糊所有内容?

如何通过聚焦文档来模糊所有内容?

推荐文章

钢轨形式保护问题,隐藏字段

钢轨形式保护问题,隐藏字段

推荐文章

电子商务网站的数据库结构

电子商务网站的数据库结构

推荐文章

如何从Spring JdbcTemplate连接到受密码保护的MS Access数据库?

如何从Spring JdbcTemplate连接到受密码保护的MS Access数据库?

推荐文章

在文本中搜索地名

在文本中搜索地名