【问题标题】:How to access a base class value from derived class c#如何从派生类c#访问基类值
【发布时间】:2013-05-30 10:37:00
【问题描述】:

谁能告诉我“如何访问派生类中的基类变量”?

例子:

1.cs 类代码

public class baseClass
{
    public int intF = 0, intS = 0;
    public int addNo()
    {
        int intReturn = 0;
        intReturn = intF + intS;
        return intReturn;
    }
}

Public class child : baseClass
{
    public int add()
    {
        int intReturn = 0;
        intReturn = base.intF * base.intS;
        return intReturn;
    }
}

Class2.cs 代码

class Program
{
    static void Main(string[] args)
    {
        baseClass obj = new baseClass();
        obj.intF = 5;
        obj.intS = 4;
        child obj1 = new child();
        Console.WriteLine(Convert.ToString(obj.addNo()));
        Console.WriteLine(Convert.ToString(obj1.add()));
        Console.ReadLine();
    }
}

问题出在从基类继承的子类中..

intF 和 intS 的值总是显示为 0 而不是 5&4。

谁能告诉我哪里出错了?

问候,

G.V.N.桑迪普

【问题讨论】:

  • 两个答案都是正确的。获得预期结果的两种最简单的方法是: 1) 将 obj 声明为“baseClass obj = new child()”并删除创建 obj1 的行(它将始终是默认值);和 2) 将 intF 和 intS 声明为“public static int”
  • 完全重复(为什么?):stackoverflow.com/questions/5296026

标签: c#


【解决方案1】:

实例字段intFintS 属于...实例,而不是类型。当您为 obj 实例设置它们时,obj1 实例中的相同字段具有它们的默认值(零)。

你必须这样分配 5 和 4:

child obj1 = new child();
obj1.intF = 5;
obj1.intS = 4;

【讨论】:

    【解决方案2】:

    您的字段不是static。您创建的每个实例(对象)都有一个单独的字段。

    objobj1 是不同的实例。

    顺便说一句,在这种情况下没有必要使用base 关键字。这两个字段 child 类中,因为继承。仅当当前类覆盖或隐藏基类的成员时才使用base

    【讨论】:

      猜你喜欢
      • 2021-06-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-27
      • 2011-12-07
      • 2015-05-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多