C#子类变量怎样继承父类成员变量
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C#子类变量怎样继承父类成员变量相关的知识,希望对你有一定的参考价值。
class Class1
public int a, b;
class Class2:Class1
public int ji()
return a * b;
*********************************************************************(a,b的值是从文本框输进去的 不管输几最后结果都是00)
private void button1_Click(object sender, EventArgs e)
Class1 a1 = new Class1();
Class2 a2 = new Class2();
a1.a = int.Parse(textBox1.Text);
a1.b = int.Parse(textBox2.Text);
textBox3.Text = a2.a.ToString() + a2.b.ToString();
这本来是求乘积的程序但结果老是0 于是求大神只要做到在文本框3里显示a,b(从文本框1,2输的值不是0了就行 其实就是简单继承变量问题 我一定是哪出错了 请指教
Class1 a1 = new Class1();
Class2 a2 = new Class2();
a1.a = int.Parse(textBox1.Text);
a1.b = int.Parse(textBox2.Text);
textBox3.Text = a2.a.ToString() + a2.b.ToString();
你给a1的字段赋值,a2的字段 a2.a, a2.b 还是默认初始化啊,也就是0,所以结果是00毫不奇怪。
private void button1_Click(object sender, EventArgs e)
Class2 a2 = new Class2();
a2.a = int.Parse(textBox1.Text);
a2.b = int.Parse(textBox2.Text);
textBox3.Text = a2.a.ToString() + a2.b.ToString();
这样你试试看追问
这样可以 但是我想让a2.a a2.b这两个变量继承父类的变量 也就是说他们的值是和a1.a a1.b 是一样的 父类变量是什么 子类变量就是什么
追答建议你看一下类与对象之间的关系。
Class2 a2,b2,c2;
a2.a = 5;
a2.b = 10;
这儿定义了三个Class2的对象,然后给a2的a,b分别赋值5,10,你觉得b2,c2的a,b属性值是几?
如果你想让两个对象一致,那你就用引用啊。
Class2 c1;
Class2 c2 = &c1;
这样,c2就是c1的引用了,你对c1做的任何改变,从c2来看,也是一样的。
你说的这种不是继承,建议看看面向对象方面的知识,了解下继承,类,对象的相关概念。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace FatherAndSon
class ClassA
static void Main(string[] args)
//编译和运行都能通过
ClassB b = new ClassB();
ClassA a = (ClassA)b;
//编译能通过,运行通不过
ClassA aa = new ClassA();
ClassB bb = (ClassB)aa;
class ClassB : ClassA
实际上:将子类强制转换为父类之后,在用这个父类强制转换为另外一个子类的时候编译和运行也都能通过;只是如果将父类直接转换为子类的时候运行会出错。这就好比:假设父类是一个装了5个“苹果”的“小型篮子”,而子类则是一个装了5个“苹果”和5个”西瓜“的大型篮子;将子类强制转换为父类<=>把父类的”小型篮子“换成”大型篮子“,但还是只装5个”苹果“(将父类的引用指向子类,但父类只能调用父子自身的变量和方法),之后再用这个父类强制转换为另外一个子类<=>向”大型篮子“里面装入5个”西瓜“送给子类的引用;而将父类直接转换为子类<=>用父类的”小型篮子“装”5个苹果和5个西瓜“送给子类的引用(当然是装不下)请看如下代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace FatherAndSon
class ClassC
static void Main(string[] args)
//先将子类强制转换为父类,然后用此父类强制转换为另外一个子类(通过)
ClassB b = new ClassB();
ClassA a = (ClassA)b;
ClassB bbbbb = (ClassB)a;
//(将父类直接强制转换为子类)编译能通过,运行通不过
ClassA aa = new ClassA();
ClassB bb = (ClassB)aa;
class ClassA
class ClassB : ClassA
另外一个值得非常注意的地方是:无论是子类强制转换赋给父类,还是父类(由子类强转得到)强制转换为子类;类对象是根据声明的类型(子类或父类)去调用其变量和函数的,与赋值无关。请看如下代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace FatherAndSon
class ClassC
static void Main(string[] args)
//先将子类强制转换为父类,然后用此父类强制转换为另外子类(通过)
ClassB b = new ClassB();
b.PrintFunc();
Console.WriteLine(b.myStr);
ClassA a = (ClassA)b;
a.PrintFunc();
Console.WriteLine(a.myStr);
ClassB bbbbb = (ClassB)a;
bbbbb.PrintFunc();
Console.WriteLine(bbbbb.myStr);
//(将父类直接强制转换为子类)编译能通过,运行通不过
//ClassA aa = new ClassA();
//ClassB bb = (ClassB)aa;
//bb.PrintFunc();
class ClassA
public string myStr;
public ClassA()
myStr = "Hello, This is myStr in ClassA";
public void PrintFunc()
Console.WriteLine("This is the Print Function in ClassA");
class ClassB : ClassA
public string myStr;
public ClassB()
myStr = "Hello, This is myStr in ClassB";
public void PrintFunc()
Console.WriteLine("This is the Print Function in ClassB");
上面代码输出的结果为:
This is the Print Function in ClassB
Hello, This is myStr in ClassB
This is the Print Function in ClassA
Hello, This is myStr in ClassA
This is the Print Function in ClassB
Hello, This is myStr in ClassB
可以看出:类的实例对象在调用其变量和方法时,确实是以 声明 成为的类为依据的。
22.2 继承的 成员变量的执行顺序
/*
* 继承中成员变量的特点:
* 子类只能继承父类的非私有成员
* 子父类中成员变量名字是一样的获取的是子类的成员变量
*
*
* 就近原则:
* 优先级(由近到远)为:局部变量---子类成员变量---父类成员变量
*
*super:子类对象的父类引用。(可以获取父类成员的变量和方法,用法同this)
* 调用父类的成员方法和变量
*this:当前对象的引用。
* 调用子类的成员方法和变量
* */
public class 继承成员变量执行优先级 public static void main(String[] args) Kid k = new Kid(); k.show(); class Dad // private String name = "dads"; String name = "your dad"; class Kid extends Dad String name = "your kid"; public void show() String name = "your name"; System.out.println(name); System.out.println(this.name); System.out.println(super.name);
输出
以上是关于C#子类变量怎样继承父类成员变量的主要内容,如果未能解决你的问题,请参考以下文章
继承的基本概念: Java不支持多继承,也就是说子类至多只能有一个父类。 子类继承了其父类中不是私有的成员变量和成员方法,作为自己的成员变量和方法。 子类中定义的成员变量和父类中