我有一种情况,其中两个类(一个派生自另一个)都明确地实现了相同的接口:
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) 我见过很多人谈论在他们的ASP.NET MVC项目中使用基本控制器.我见过的典型例子就是记录或者CRUD脚手架.基本控制器类有哪些其他好的用途?
如何创建扩展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结尾的文件名 …
我有一个基本控制器类:
而我所有的其他控制器都像这样继承了这个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) 我有一个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
我有一个类(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) 我正在尝试编写一个自定义JsonConverter,用于一个人子类化列表或集合,但随后为子类添加额外属性的情况(参见此处).JSON.NET的当前实现只是将列表更改为子对象数组,并忽略所有添加的属性.所以我想编写一个新的JsonConverter,它将对象看作是一个List并且只是像往常一样序列化其他所有东西,然后在序列化中添加一个名为'_Items'的新属性,其中实际的数据数组是存储.
现在我已经为我们的特定List子类编写了一个类,但我不得不逐个手动指定所有属性.但是,如果我可以编写一个转换器,将其视为普通对象,那么手动处理这些项目,我就是金色的.我甚至不在乎我是否最终复制另一个班级的一半(甚至更多!)但我很乐意为这些案例制作一个可重复使用的转换器.但是,正如我所说,我找不到默认转换器来启动.
那么......有谁知道那是哪里?
我有一些类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表示.
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工程师,我想知道这一点.如果我们可以避免基类指针,为什么要使用虚函数?
我有以下基类:
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默认调用基类构造函数吗?我是否必须在派生类构造函数中隐式执行此操作?
base-class ×10
c# ×3
controller ×2
interface ×2
activator ×1
asp.net-mvc ×1
c++ ×1
casting ×1
constructor ×1
inheritance ×1
jackson ×1
java ×1
json ×1
json.net ×1
oop ×1
php ×1
phpunit ×1
polymorphism ×1
python ×1
subclassing ×1
unit-testing ×1