LZ 似乎根本没弄明白继承的含义!GaLa 直接从 JiRi 继承就可以了,而且虚方法不是必须重写的!而且 GaLa 从 JiRi 继承后并为做任何改动,这种继承毫无意义!    public class GaLa : JiRi
    {
        public static string FullName = "GaLa";
        public int Age = 30;        public GaLa()
        {
        }
    }

解决方案 »

  1.   

    父类在OOA的思路和理念下是无法访问子类的属性的,好比在.net中任何对象都继承自object.所以任何对象都能使用object的方法和属性,但object不能使用比如Label的Text属性一样.
    但是C#在IL和CLR的原理基础上可能作到,你需可以使用反射,delegate,去尝试让一个对象运行时取得一个在设计时并不知道的对象的属性. 我不清楚2.0的范型能不能作到但我觉得反射和delegate调用是可能的
      

  2.   

    个人感觉
    csharp 设计的初衷:继承是为了子类访问父类,并不是父类去访问子类!
    所以我认为楼主是钻牛角尖了!
      

  3.   

    public class GaLa  若不是写程序
    就无发获得正确的结果.我在做一个大型软件系统,里面有几十上百的类,其实里面的代码都一样,
    我在寻找一个方法,可否就写一个类,然后继承这个类,然后重复的代码都
    不用写了.想省掉这个部分代码 看到了嘛?
    若这个部分的代码不写, 类就无法获得正确的答案, .我想也会有其他
    人遇到了这样的问题.谁能不用反射什么的,比较高效的处理这个问题,我愿意支付500元.
    虽然太少了一点儿,但是值得折腾一下.总不会浪费时间了.
      

  4.   

    答复:yixianggao(你我他,三人行必有我师焉!) 我不写那些代码,就无法获得正确的答案,否则必须写上了.
      

  5.   

    现在问题的本质是:
    GaLa.GetFullName()
    GaLa.GetAge()
    无法正确读取到GaLa这个类的值,而是读到了JiRi的值.
      

  6.   

    http://blog.csdn.net/zhzuo/archive/2004/04/05/22027.aspx
    要看了还不懂我就服你
      

  7.   

    用抽象类,不要用接口!
    namespace WinApp20070519
    {
        public abstract class JR
        {
            //可选abstract ,abstract 标记必须重写
            string GetFullName()
            {}
            int GetAge(){}
        }
      

  8.   

    using System;
    using System.Collections.Generic;
    using System.Text;namespace testcsdn
    {
        public interface JR
        {
            string GetFullName();
            int GetAge();
        }    public class JiRi : JR
        {
            private string _FullName = "JiRi";        public virtual string FullName
            {
                get { return _FullName; }
                set { _FullName = value; }
            }
            private int _Age = 29;        public virtual int Age
            {
                get { return _Age; }
                set { _Age = value; }
            }        public JiRi()
            {
            }        public  string GetFullName()
            {
                return FullName;
            }        public  int GetAge()
            {
                return Age;
            }
        }    public class GaLa : JiRi, JR
        {
            private static string _FullName = "GaLa";
            private int _Age = 30;        public GaLa()
            {
            }
                    public override string FullName
            {
                get { return _FullName; }
                set { _FullName = value; }
            }        public override int Age
            {
                get { return _Age; }
                set { _Age = value; }
            }    }
    }
      

  9.   

    GaLa g = new GaLa();            Console.WriteLine("{0}", g.GetFullName());            Console.ReadKey();
      

  10.   

    csharp 设计的初衷:继承是为了子类访问父类,并不是父类去访问子类!
      

  11.   

    namespace WinApp20070519
    {
        public abstract class JR
        {
            //可选abstract ,abstract 标记必须重写
            string GetFullName()
            {}
            int GetAge(){}
        }up
      

  12.   

    public static string FullName = "GaLa";
    public int Age = 30;
    都改成private
      

  13.   

     public   class   GaLa   :   JiRi,   JR 
            { 
                    public   static   string   FullName   =   "GaLa "; 
                    public   int;                 public   GaLa() 
                    { 
                       int   Age   =   30;
                    } 
             } 
    ------------------------
    没试过。试试看
      

  14.   

    错了,如下:public   class   GaLa   :   JiRi,   JR  
            {  
                    public   static   string   FullName   =   "GaLa ";  
                    public   int Age;                  public   GaLa()  
                    {  
                       this.Age   =   30; 
                    }  
             } 
      

  15.   

    1. 什么不用override?2. static的成员是不会被集成的,而是被类及其所有可访问该成员的子类所公用的
      

  16.   

    我在做一个大型软件系统,里面有几十上百的类,其实里面的代码都一样, 
    我在寻找一个方法,可否就写一个类,然后继承这个类,然后重复的代码都 
    不用写了. 解决方案:
    1.静态方案:(1)可以用CodeSimth等代码生成工具,直接根据代码模板来生成新代码,把这些不变的公用的代码都写到模板里。(2)你可以自己写代码在第一次运行时去动态Emit出IL代码,从而实现一个新的类型。2.动态方案:用多态,但肯定要用到override,这正好就是多态要解决的问题啊,通过后期绑定具体子类来实现不同的效果,从而适应需求的变化比如模板方法模式,主流程在基类里都是定了的,是可重用的,而一些具体的小环节可能有变化,那么就定义为abstract或virtaul的方法,在具体的子类里就只用重写这些abstract或virtaul的方法就可以了最典型的例子就是ASP。Net里的页面生命周期模型。微软在Page基类里就把整个页面解析过程定好了,你要做的就是让你的web page类继承自微软的Page基类,然后去Override页面执行过程中的某些环节,比如OnLoad等,加入你自己的处理逻辑模板方法模式配合工厂模式,我想能很好解决你的问题,而且在后期扩展也较容易
      

  17.   

    用多态能实现吗?
    FatherClass fc=new SonClass();
    fs.Father();//调用父类中的方法
      

  18.   


    lz我要向你要钱了  呵呵public   class   GaLa   :   JiRi,   JR 
            {   
                    public   GaLa() 
                    { 
                        FullName   =   "GaLa "; 
                        Age   =   30; 

                    }                 //   override   想省掉这个部分代码   
                    public   string   GetFullName() 
                    { 
                            return   FullName; 
                    }                 //   override   想省掉这个部分代码   
                    public   int   GetAge() 
                    { 
                            return   this.Age; 
                    } 
            } 
      

  19.   


    看错了还有一个静态的 不知道这样行不行
    public class GaLa : JiRi, JR  
    {   
      public   static   string   FullName   =   "GaLa "; 
      public GaLa()  
      {  
          Age = 30; 
      }  
    }private   void   btnTest_Click(object   sender,   EventArgs   e) 
                    { 
                            //   直接调用 
                            this.txtFullName.Text   =   JiRi.FullName; 
                            JR   myJR   =   new   JiRi(); 
                            this.txtGetFullName.Text   =   myJR.GetFullName(); 
                            this.txtGetAge.Text   =   myJR.GetAge().ToString();                         this.txtFullName2.Text   =   GaLa.FullName; 
                            GaLa   myGaLa   =   new   GaLa(); 
                            this.txtGetFullName2.Text   =   myGaLa.FullName; 
                            this.txtGetAge2.Text   =   myGaLa.GetAge().ToString(); 
                    }