从C#中的子类实例获取基类中的值集

时间:2017-01-31 09:57:01

标签: javascript c# .net oop

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

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
}

更新 controller.js

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

类Derived类是MVC控制器类。 上述js控制器是角度控制器。 js控制器调用派生类的Index1函数。

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

感谢。

2 个答案:

答案 0 :(得分:0)

在这种情况下,如果您不关心封装,您可以通过以下方式直接访问您的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

答案 1 :(得分:0)

我会尝试猜测。

我想到的第一件事是你在派生类中声明了一个变量和一个具有相同名称的方法:

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;
}