【问题标题】:Get value set in base class from child class instance in C#从 C# 中的子类实例获取基类中设置的值
【发布时间】:2017-06-16 16:58:12
【问题描述】:

我有一个基类和一个派生类如下:

public class BaseClass
{
    public int a;
    public void Index() {
        a = 1;
    }
    public int Index1() {
        return a;
    }
}

public class DerivedClass : BaseClass
{
    //some derived class mehods
}
public class Main
{
    DerivedClass d = new DerivedClass();
    d.Index(); //this sets the value of a to 1
    //int i = d.Index1(); //returns 0
}

更新 控制器.js

$http.get('/DerivedClass/Index1')
.success()
.error();

派生类是一个MVC控制器类。 上面的js控制器是一个角度控制器。 js控制器调用派生类的Index1函数。

如果我使用静态变量 'a' 然后 Index1() 将返回 1,但我不想使用静态变量。需要任何其他解决方案。

谢谢。

【问题讨论】:

  • 您发布的代码中Index1() 的实现不可能返回null。它返回一个int
  • 我怀疑Index1 返回null,因为int 不能为空。实际上它只是返回零,这不一样!无论如何,如果没有你的派生类的代码,我们就不能说你出了什么问题。
  • 我运行您发布的代码,它返回 1,而不是 null。
  • 我预计错误出在您没有向我们展示的“一些派生类方法”中。
  • 看起来您在 Index1 中返回的变量与您在 Index 中初始化的变量不同

标签: javascript c# .net oop


【解决方案1】:

在这种情况下,如果您不关心封装,您可以通过以下方式直接访问您的 BaseClass 公共字段:

  DerivedClass d = new DerivedClass();
  d.a = 1; //sets the value of a to 1
  var i = d.a; //gets the value of a field

【讨论】:

    【解决方案2】:

    我会试着做一个疯狂的猜测。

    首先想到的是你在派生类中声明了一个变量和一个同名的方法:

    public class BaseClass
    {
        public int a;
        public void Index()
        {
            a = 1;
        }
        public int Index1()
        {
            return a;
        }
    }
    
    public class DerivedClass : BaseClass
    {
        public int a;
        //some derived class mehods
    
        public int Index1()
        {
            return a;
        }
    }
    

    现在你的问题可以重现了:

    DerivedClass d = new DerivedClass();
    d.Index(); //this sets the value of a to 1
    int i = d.Index1(); // --> NOW it REALLY returns "0"
    

    这种情况的解决方案是从派生类中删除public int a;,或者在派生类中调用:

    public new int Index1()
    {
        return base.a;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-01-27
      • 2013-10-15
      • 1970-01-01
      • 1970-01-01
      • 2017-10-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多