LZ 似乎根本没弄明白继承的含义!GaLa 直接从 JiRi 继承就可以了,而且虚方法不是必须重写的!而且 GaLa 从 JiRi 继承后并为做任何改动,这种继承毫无意义! public class GaLa : JiRi
{
public static string FullName = "GaLa";
public int Age = 30; public GaLa()
{
}
}
{
public static string FullName = "GaLa";
public int Age = 30; public GaLa()
{
}
}
但是C#在IL和CLR的原理基础上可能作到,你需可以使用反射,delegate,去尝试让一个对象运行时取得一个在设计时并不知道的对象的属性. 我不清楚2.0的范型能不能作到但我觉得反射和delegate调用是可能的
csharp 设计的初衷:继承是为了子类访问父类,并不是父类去访问子类!
所以我认为楼主是钻牛角尖了!
就无发获得正确的结果.我在做一个大型软件系统,里面有几十上百的类,其实里面的代码都一样,
我在寻找一个方法,可否就写一个类,然后继承这个类,然后重复的代码都
不用写了.想省掉这个部分代码 看到了嘛?
若这个部分的代码不写, 类就无法获得正确的答案, .我想也会有其他
人遇到了这样的问题.谁能不用反射什么的,比较高效的处理这个问题,我愿意支付500元.
虽然太少了一点儿,但是值得折腾一下.总不会浪费时间了.
GaLa.GetFullName()
GaLa.GetAge()
无法正确读取到GaLa这个类的值,而是读到了JiRi的值.
要看了还不懂我就服你
namespace WinApp20070519
{
public abstract class JR
{
//可选abstract ,abstract 标记必须重写
string GetFullName()
{}
int GetAge(){}
}
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; }
} }
}
{
public abstract class JR
{
//可选abstract ,abstract 标记必须重写
string GetFullName()
{}
int GetAge(){}
}up
public int Age = 30;
都改成private
{
public static string FullName = "GaLa ";
public int; public GaLa()
{
int Age = 30;
}
}
------------------------
没试过。试试看
{
public static string FullName = "GaLa ";
public int Age; public GaLa()
{
this.Age = 30;
}
}
我在寻找一个方法,可否就写一个类,然后继承这个类,然后重复的代码都
不用写了. 解决方案:
1.静态方案:(1)可以用CodeSimth等代码生成工具,直接根据代码模板来生成新代码,把这些不变的公用的代码都写到模板里。(2)你可以自己写代码在第一次运行时去动态Emit出IL代码,从而实现一个新的类型。2.动态方案:用多态,但肯定要用到override,这正好就是多态要解决的问题啊,通过后期绑定具体子类来实现不同的效果,从而适应需求的变化比如模板方法模式,主流程在基类里都是定了的,是可重用的,而一些具体的小环节可能有变化,那么就定义为abstract或virtaul的方法,在具体的子类里就只用重写这些abstract或virtaul的方法就可以了最典型的例子就是ASP。Net里的页面生命周期模型。微软在Page基类里就把整个页面解析过程定好了,你要做的就是让你的web page类继承自微软的Page基类,然后去Override页面执行过程中的某些环节,比如OnLoad等,加入你自己的处理逻辑模板方法模式配合工厂模式,我想能很好解决你的问题,而且在后期扩展也较容易
FatherClass fc=new SonClass();
fs.Father();//调用父类中的方法
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;
}
}
看错了还有一个静态的 不知道这样行不行
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();
}