标签: base-class

如何在基类上调用显式实现的接口方法

我有一种情况,其中两个类(一个派生自另一个)都明确地实现了相同的接口:

interface I
{
  int M();
}

class A : I
{
  int I.M() { return 1; }
}

class B : A, I
{
  int I.M() { return 2; }
}
Run Code Online (Sandbox Code Playgroud)

从派生类的实现I.M(),我想调用基类的实现,但我不知道如何做到这一点.到目前为止我尝试的是(在B级):

int I.M() { return (base as I).M() + 2; }
// this gives a compile-time error
//error CS0175: Use of keyword 'base' is not valid in this context

int I.M() { return ((this as A) as I).M() + 2; }
// this results in an …
Run Code Online (Sandbox Code Playgroud)

c# interface base-class explicit-implementation

29
推荐指数
2
解决办法
1万
查看次数

什么是ASP.NET MVC中基本控制器类的优秀候选者?

我见过很多人谈论在他们的ASP.NET MVC项目中使用基本控制器.我见过的典型例子就是记录或者CRUD脚手架.基本控制器类有哪些其他好的用途?

asp.net-mvc controller base-class

27
推荐指数
2
解决办法
1万
查看次数

扩展PHPUnit_Framework_TestCase的不可测试的基类

摘要

如何创建扩展PHPUnit_Framework_TestCase的基类并将其用于子类化实际测试用例,而不需要PHPUnit对基类本身进行测试?

进一步说明

我有一系列相关的测试用例,我已经为其创建了一个基类,其中包含了所有测试用例都要继承的常见测试:

BaseClass_TestCase.php:
class BaseClass_TestCase extends PHPUnit_Framework_TestCase { 
  function test_common() {
    // Test that should be run for all derived test cases
  }
}

MyTestCase1Test.php:
include 'BaseClass_TestCase.php';
class MyTestCase1 extends BaseClass_TestCase {
    function setUp() {
      // Setting up
    }
    function test_this() {
      // Test particular to MyTestCase1
    }
}

MyTestCase2Test.php:
include 'BaseClass_TestCase.php';
class MyTestCase2 extends BaseClass_TestCase {
    function setUp() {
      // Setting up
    }
    function test_this() {
      // Test particular to MyTestCase2
    }
}
Run Code Online (Sandbox Code Playgroud)

我的问题是,当我尝试在文件夹中运行所有测试时,它会失败(没有输出).

试图调试我发现问题在于基类本身是PHPUnit_Framework_TestCase的子类,因此PHPUnit也会尝试运行它的测试.(在那之前,我天真地认为只有在实际测试文件中定义的类 - 以Test.php结尾的文件名 …

php phpunit unit-testing base-class subclassing

26
推荐指数
1
解决办法
5313
查看次数

基类中的ExecuteCore()未在MVC 4 beta中触发

我有一个基本控制器类:

而我所有的其他控制器都像这样继承了这个BaseClass

所有这些在MVC3中运行良好(今天再次测试,它确实有效)但似乎在MVC 4 beta中不再触发BaseController中的ExecuteCore.

任何的想法?或者任何巨大的变化都在引擎盖下?非常感谢.

public class BaseController : Controller
{
    private string _myData;

    public string MyData
    {
        get
        {
            return _myData;
        }
    }

    protected override void ExecuteCore()
    {
        _myData = "I am doing something";

        base.ExecuteCore();
    }
}


public class HomeController : BaseController
{
    public ActionResult Index()
    {
        ViewBag.MyData = MyData;
        // Doing something with value in BaseClass

        return View();
    }
}
Run Code Online (Sandbox Code Playgroud)

controller base-class asp.net-mvc-4

26
推荐指数
3
解决办法
9441
查看次数

如何避免错误"继承基类时未找到类型'MyType'上的构造函数"

我有一个Visual Studio 2010 Windows窗体应用程序,其中包含其他类将继承的Form基类.基类的构造函数接受子类将传递给基类的参数.

例:

public partial class BaseForm : Form
{
    public BaseForm(int number)
    {
        InitializeComponent();
    }
}

public partial class ChildForm : BaseForm
{
    public ChildForm(int number)
        : base(number)
    {
        InitializeComponent();
    }
}
Run Code Online (Sandbox Code Playgroud)

我遇到的问题是,当我尝试在VisualStudio的设计视图模式下打开ChildForm时,我收到以下错误:

找不到类型"MyProject.BaseForm"的构造函数.

注意:无论错误如何,项目编译并运行正常.

如果我用不包含任何参数的构造函数重载构造函数,我可以避免错误.

示例:(这消除了错误)

public partial class BaseForm : Form
{
    public BaseForm(int number)
    {
        InitializeComponent();
    }

    public BaseForm()
    {
        InitializeComponent();
    }
}

public partial class ChildForm : BaseForm
{
    public ChildForm(int number)
        : base(number)
    {
        InitializeComponent();
    }
}
Run Code Online (Sandbox Code Playgroud)

我的问题是,如何创建一个不包含无参数构造函数的基类并避免设计视图错误?

c# inheritance base-class visual-studio-2010 windows-forms-designer

25
推荐指数
1
解决办法
1万
查看次数

.NET:无法将对象转换为它实现的接口

我有一个类(TabControlH60),它继承自基类(UserControl)并实现一个接口(IFrameworkClient).我使用.NET Activator类实例化对象.使用返回的实例,我可以转换为UserControl基类,但不能转换为接口.我得到的例外是在代码snipet下面.如何转换为界面?

object obj = Activator.CreateInstance(objType);
Type[] interfaces = obj.GetType().GetInterfaces(); // contains IFrameworkClient

m_Client = (UserControl)obj;                 // base class cast works
IFrameworkClient fc = (IFrameworkClient)obj; // interface cast fails

// Note: The (IFrameworkClient)obj cast works fine in the debugger Watch window.
{"Unable to cast object of type 'FPG.H60.AFF.TabControlH60' to type 
    'FPG.AFF.Interfaces.IFrameworkClient'."}
Run Code Online (Sandbox Code Playgroud)

c# casting interface base-class activator

24
推荐指数
4
解决办法
3万
查看次数

JSON.NET中使用的默认JsonConverter是什么?

我正在尝试编写一个自定义JsonConverter,用于一个人子类化列表或集合,但随后为子类添加额外属性的情况(参见此处).JSON.NET的当前实现只是将列表更改为子对象数组,并忽略所有添加的属性.所以我想编写一个新的JsonConverter,它将对象看作一个List并且只是像往常一样序列化其他所有东西,然后在序列化中添加一个名为'_Items'的新属性,其中实际的数据数组是存储.

现在我已经为我们的特定List子类编写了一个类,但我不得不逐个手动指定所有属性.但是,如果我可以编写一个转换器,将其视为普通对象,那么手动处理这些项目,我就是金色的.我甚至不在乎我是否最终复制另一个班级的一半(甚至更多!)但我很乐意为这些案例制作一个可重复使用的转换器.但是,正如我所说,我找不到默认转换器来启动.

那么......有谁知道那是哪里?

base-class json.net default-implementation

24
推荐指数
1
解决办法
6849
查看次数

如何使用Java和Jackson Library对Json String进行多态反序列化?

我有一些类A,B,C它们都继承自BaseClass类.

我有一个String json,它包含A,B,C或BaseClass的json表示.

我想有一些方法将此String反序列化为BaseClass(多态反序列化).像这样的东西

BaseClass base = ObjectMapper.readValue(jsonString, BaseClass.class);
Run Code Online (Sandbox Code Playgroud)

jsonString 可以是A,B,C或BaseClass中任何一个的Json String表示.

java serialization json base-class jackson

24
推荐指数
1
解决办法
2万
查看次数

为什么使用基类指针来派生类

class base{
    .....
    virtual void function1();
    virtual void function2();
};

class derived::public base{
    int function1();
    int function2();
};

int main()
{
    derived d;
    base *b = &d;
    int k = b->function1() // Why use this instead of the following line?
    int k = d.function1(); // With this, the need for virtual functions is gone, right?

}
Run Code Online (Sandbox Code Playgroud)

我不是CompSci工程师,我想知道这一点.如果我们可以避免基类指针,为什么要使用虚函数?

c++ oop polymorphism virtual-functions base-class

21
推荐指数
1
解决办法
2万
查看次数

派生类构造函数如何在python中工作?

我有以下基类:

class NeuralNetworkBase:
    def __init__(self, numberOfInputs, numberOfHiddenNeurons, numberOfOutputs):
        self.inputLayer = numpy.zeros(shape = (numberOfInputs))
        self.hiddenLayer = numpy.zeros(shape = (numberOfHiddenNeurons))
        self.outputLayer = numpy.zeros(shape = (numberOfOutputs))

        self.hiddenLayerWeights = numpy.zeros(shape = (numberOfInputs, numberOfHiddenNeurons))
        self.outputLayerWeights = numpy.zeros(shape = (numberOfHiddenNeurons, numberOfOutputs))
Run Code Online (Sandbox Code Playgroud)

现在,我有一个派生类,代码如下:

class NeuralNetworkBackPropagation(NeuralNetworkBase):
    def __init__(self, numberOfInputs, numberOfHiddenNeurons, numberOfOutputs):
        self.outputLayerDeltas = numpy.zeros(shape = (numberOfOutputs))
        self.hiddenLayerDeltas = numpy.zeros(shape = (numberOfHiddenNeurons))
Run Code Online (Sandbox Code Playgroud)

但是当我实例化NeuralNetworkBackPropagation时,我希望两个构造函数都被调用.这是,我不想覆盖基类的构造函数.在运行派生类'one时,python默认调用基类构造函数吗?我是否必须在派生类构造函数中隐式执行此操作?

python constructor base-class derived-class

20
推荐指数
2
解决办法
2万
查看次数