A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 吴承烨 中级黑马   /  2013-6-17 17:51  /  2029 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 吴承烨 于 2013-6-18 20:55 编辑
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;

  5. namespace 里氏转换数组
  6. {
  7.     class Program
  8.     {
  9.         static void Main(string[] args)
  10.         {
  11.             //用数组弄2个人出来
  12.             Sun sun = new Sun("吴沉烨", "女", "女人", 100);
  13.             Sun1 sun1 = new Sun1("小明", "男", "男人", 180);
  14.             Preson[] preson = { sun, sun1 };
  15.             for (int i = 0; i < preson.Length; ++i)
  16.             {
  17.                //循环里头怎么打印出Say方法
  18.             }
  19.             //((Sun)preson[0]).Say();
  20.             //((Sun1)preson[1]).Say();
  21.             Console.ReadKey();
  22.         }
  23.     }
  24.     //父类
  25.     class Preson
  26.     {
  27.         public Preson(string name, string gender, string hobby)
  28.         {
  29.             this.name = name;
  30.             this.gender = gender;
  31.             this.hobby = hobby;
  32.         }
  33.         //姓名
  34.         string name;

  35.         public string Name
  36.         {
  37.             get { return name; }
  38.             set { name = value; }
  39.         }
  40.         //性别
  41.         string gender;

  42.         public string Gender
  43.         {
  44.             get { return gender; }
  45.             set { gender = value; }
  46.         }
  47.         //爱好
  48.         private string hobby;

  49.         public string Hobby
  50.         {
  51.             get { return hobby; }
  52.             set { hobby = value; }
  53.         }
  54.         //方法
  55.         public void SayHello()
  56.         {
  57.             Console.WriteLine("我叫{0},性别{1},爱好{2}", name, gender, hobby);
  58.         }
  59.     }
  60.     //子类1
  61.     class Sun : Preson
  62.     {
  63.         //构造方法
  64.         public Sun(string name, string genter, string hobby, int fenshu)
  65.             : base(name, genter, hobby)
  66.         {
  67.             this.fenshu = fenshu;
  68.         }
  69.         //分数
  70.         int fenshu;

  71.         public int Fenshu
  72.         {
  73.             get { return fenshu; }
  74.             set { fenshu = value; }
  75.         }
  76.         public void Say()
  77.         {
  78.             Console.WriteLine("我的名字叫{0},性别{1},爱好{2},分数{3}",Name,Gender,Hobby,fenshu);
  79.         }
  80.     }
  81.     //子类2
  82.     class Sun1 : Preson
  83.     {
  84.         //构造方法
  85.         public Sun1(string name, string genter, string hobby,int shengao)
  86.             : base(name, genter, hobby)
  87.         {
  88.             this.shengao = shengao;
  89.         }
  90.         //身高
  91.         int shengao;

  92.         public int Shengao
  93.         {
  94.             get { return shengao; }
  95.             set { shengao = value; }
  96.         }
  97.         public void Say()
  98.         {
  99.             Console.WriteLine("我的名字叫{0},性别{1},爱好{2},身高{3}", Name, Gender, Hobby, Shengao);
  100.         }
  101.     }
  102. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
苏波 + 1

查看全部评分

6 个回复

倒序浏览
这样可以做到吧  如果不管性能什么的  只达到现在的小目标  
           try
                {
                    ((Sun)preson[i]).Say();
                }
                catch
                {
                    ((Sun1)preson[1]).Say();
                }

评分

参与人数 1技术分 +1 收起 理由
苏波 + 1

查看全部评分

回复 使用道具 举报
当循环到第二个sun1时 try里面会出异常  catch就能捕捉异常 再在catch里处理就行了, 把person[1]转成sun1就行了
回复 使用道具 举报
谢谢你,看完这么长代码,答复我.
你的代码,局限性太大.只能适合做这题.
回复 使用道具 举报
谢谢你,看完这么长代码,答复我.
你的代码,局限性太大.只能适合做这题.
回复 使用道具 举报
吴承烨 发表于 2013-6-17 21:48
谢谢你,看完这么长代码,答复我.
你的代码,局限性太大.只能适合做这题.

你的父类和子类设计的不合理,既然使用了继承,要么在父类中定义成虚方法,要不抽象出接口
回复 使用道具 举报
吴承烨 发表于 2013-6-17 21:48
谢谢你,看完这么长代码,答复我.
你的代码,局限性太大.只能适合做这题.

用多态:在父类中写虚方法vritual Say(),然后在子类中override Say(),然后不转换直接用Person调用Say()方法
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马