首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 .NET Java 游戏 视频 人才 外包 培训 数据库 书店 程序员
中国软件网
欢迎您:游客 | 登录 注册 帮助
  • C#关于泛型的问题!
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-02-14 16:35:01 楼主
        public abstract class TTest <T>
        {
            public virtual void OutPut()
            {

            }
        }
        public class StringTTest : TTest <string>
        {
            public override void OutPut()
            {
                MessageBox.Show("输入的是字符串!");
            }
        }

        public class IntTTest : TTest <int>
        {
            public override void OutPut()
            {
                MessageBox.Show("输入的是一个整数!");
            }
        }
    为什么在调用的时候new一个string的TTest在调用output方法时下面两个子类的方法都不被调用!!!!
    20  修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • hdt
    • 等级:
    发表于:2008-02-14 16:40:051楼 得分:0
    code ?
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • QQQQAnnie
    • 等级:
    发表于:2008-02-14 16:40:352楼 得分:0
    没用过,up
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-02-14 16:45:093楼 得分:0
    顶帖
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • showbo
    • 等级:
    发表于:2008-02-14 16:45:124楼 得分:0
    你怎么用的??
    我这里没问题啊?

    下面两个子类的方法???
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-02-14 16:46:415楼 得分:0
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Text;
    using System.Windows.Forms;

    namespace T
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
            private void button1_Click(object sender, EventArgs e)
            {
                try
                {
                    Convert.ToInt32(textBox1.Text);
                    TTest <int> t = new TTest <int>();
                    t.OutPut();
                }
                catch
                {
                    TTest <string> t = new TTest <string>();
                    t.OutPut();
                }
            }
        }

        public abstract class TTest <T>
        {
            public virtual void OutPut()
            {

            }
        }
        public class StringTTest : TTest <string>
        {
            public override void OutPut()
            {
                MessageBox.Show("输入的是字符串!");
            }
        }

        public class IntTTest : TTest <int>
        {
            public override void OutPut()
            {
                MessageBox.Show("输入的是一个整数!");
            }
        }
    }
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • vrhero
    • 等级:
    发表于:2008-02-14 16:47:146楼 得分:0
    为什么在调用的时候new一个string的TTest在调用output方法时
    ------------
    因为...只听说过老子遗传给儿子没听说过儿子还能遗传给老子...
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-02-14 16:47:597楼 得分:0
    如果输入的是整数则探出一个输入是整数的提示框,没反应
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-02-14 16:50:508楼 得分:0
    那根据不同的T调用不同的方法应该怎么写!!!
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-02-14 16:52:079楼 得分:0
    该回复于2008-03-05 17:07:58被版主删除
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • vrhero
    • 等级:
    发表于:2008-02-14 16:53:1810楼 得分:0
    你把泛型当成什么了?或者说你把继承当成什么了?

    这段代码毫无意义...不知道你想干什么...
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • showbo
    • 等级:
    发表于:2008-02-14 16:54:0011楼 得分:0
    我晕,你的TTest <T>是抽象类了怎么实例化??
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-02-14 16:55:0612楼 得分:0
    我想通过泛型来判断不同的输入,弹出不同的提示框,用反型该怎么写
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-02-14 16:56:1513楼 得分:0
    应该没有abstract的!
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • showbo
    • 等级:
    发表于:2008-02-14 16:59:2714楼 得分:0
    重载下函数不就得了???????

    C# code
    public void OutPut(string Msg) { MessageBox.Show("输入的是字符串!"); } public void OutPut(int Msg) { MessageBox.Show("输入的是一个整数!"); }
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-02-14 17:03:4015楼 得分:0
    public  abstract  class  TTest <T>
            {
                    public  virtual  void  OutPut()
                    {

                    }
            }
    你这个不就有abstract了。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-02-14 17:03:5316楼 得分:0
    目的是想练习泛型,多态性
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • showbo
    • 等级:
    发表于:2008-02-14 17:07:5717楼 得分:0
    练习你也要搞清楚什么是老子,什么是儿子
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-02-14 17:09:3918楼 得分:0
    那前辈说应该怎么写!?
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-02-14 17:11:1319楼 得分:0
    建议去查查msdn!
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-02-14 17:11:4720楼 得分:0
    C# code
    public class TTest<T> { public void OutPut() { switch (typeof(T).ToString()) { case "System.Int32": MessageBox.Show("输入的是一个整数!"); break; case "System.String": MessageBox.Show("输入的是字符串!"); break; } } }
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-02-14 17:15:5521楼 得分:0
    泛型类不可以被继承!?
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-02-14 17:46:5322楼 得分:0
    20楼的正解
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • Jeffrey84
    • 等级:
    发表于:2008-02-14 18:51:4523楼 得分:0
    int.TryParse也可以,何苦用这个
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-02-14 19:31:1224楼 得分:0
    范型就是用特定的类型(用户指定)代替范型类型
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-02-14 19:56:4525楼 得分:0
    new TTest <string>和 new StringTTest  是两码事,不能混淆
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • andyhooo
    • 等级:
    发表于:2008-02-15 09:35:0326楼 得分:0
    厉害,学习
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-02-15 14:09:4827楼 得分:0
    1.public  abstract  class  TTest <T>
    abstract不能被实例化

    2.public  class  StringTTest  :  TTest <string>

    TTest <string>是实例化的TTest <T>,StringTTest与TTest <T>已不存在overrider关系
    public  class  StringTTest <T>  :  TTest <T>则存在,
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-02-15 14:24:2228楼 得分:0
    1、泛型类继承中,父类的类型参数已被实例化,这种情况下子类不一定必须是泛型类;

    2、父类的类型参数没有被实例化,但来源于子类,也就是说父类和子类都是泛型类,并且二者有相同的类型参
    ========================================
    public  abstract  class  TTest
            {
                    public  virtual  void  OutPut()
                    {

                    }
            }
            public  class  StringTTest  :  TTest
            {
                    public  override  void  OutPut()
                    {
                            MessageBox.Show("输入的是字符串!");
                    }
            }

            public  class  IntTTest  :  TTest
            {
                    public  override  void  OutPut()
                    {
                            MessageBox.Show("输入的是一个整数!");
                    }
            }
    可以overrider
    ================================================
          public  abstract  class  TTest <T>
            {
                    public  virtual  void  OutPut()
                    {

                    }
            }
            public  class  StringTTest <T>  :  TTest <T> where  T:string
            {
                    public  override  void  OutPut()
                    {
                            MessageBox.Show("输入的是字符串!");
                    }
            }

            public  class  IntTTest <T>  :  TTest <T> where  T:int
            {
                    public  override  void  OutPut()
                    {
                            MessageBox.Show("输入的是一个整数!");
                    }
            }
    可以Overrider
    ===========================
    以上没测试,试试看
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-02-15 14:24:2729楼 得分:0
    1、泛型类继承中,父类的类型参数已被实例化,这种情况下子类不一定必须是泛型类;

    2、父类的类型参数没有被实例化,但来源于子类,也就是说父类和子类都是泛型类,并且二者有相同的类型参
    ========================================
    public  abstract  class  TTest
            {
                    public  virtual  void  OutPut()
                    {

                    }
            }
            public  class  StringTTest  :  TTest
            {
                    public  override  void  OutPut()
                    {
                            MessageBox.Show("输入的是字符串!");
                    }
            }

            public  class  IntTTest  :  TTest
            {
                    public  override  void  OutPut()
                    {
                            MessageBox.Show("输入的是一个整数!");
                    }
            }
    可以overrider
    ================================================
          public  abstract  class  TTest <T>
            {
                    public  virtual  void  OutPut()
                    {

                    }
            }
            public  class  StringTTest <T>  :  TTest <T> where  T:string
            {
                    public  override  void  OutPut()
                    {
                            MessageBox.Show("输入的是字符串!");
                    }
            }

            public  class  IntTTest <T>  :  TTest <T> where  T:int
            {
                    public  override  void  OutPut()
                    {
                            MessageBox.Show("输入的是一个整数!");
                    }
            }
    可以Overrider
    ===========================
    以上没测试,试试看
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-02-15 14:30:1930楼 得分:0
    同意20楼的
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-02-15 14:40:2731楼 得分:0
    實例化子類,就同時實例了基類,
    但反過來不會
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-02-15 14:51:0232楼 得分:0
    强人

    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-02-15 14:53:1533楼 得分:0
    25楼说得已经很清楚了
    修改 删除 举报 引用 回复