我有三节课。首先是抽象的,它是由子类继承的,子类又被继承了。如何从抽象类的第三类调用方法?
示例代码:
CheckBox
如何从public abstract class DoSth
{
public void DoSomething()
{
Console.WriteLine("I'm doing something");
this.DoSomethingBigger();
}
protected abstract void DoSomethingBigger();
}
public class Writer : DoSth
{
protected override void DoSomethingBigger()
{
Console.WriteLine("I'm writting");
}
}
public class BookWriter : Writer
{
protected new void DoSomethingBigger()
{
Console.WriteLine("I'm writting a book");
}
}
类调用DoSomethingBigger()
?
当我创建BookWriter
的实例并调用BookWriter
时,我的输出是
DoSomething()
但我想要
I'm doing something
I'm writting
答案 0 :(得分:2)
通过用exports.getAllstudentsmark = function(req, callback)
{
studentsmarks.find(function(error, studentsmarks_collection) {
if( error ) callback(error)
else {
studentsmarks_collection.toArray(function(error, results) {
if( error ) callback(error)
else {
newresult = [];
for(i=0;i<results.length;i++)
{
getStudentName(results[i].studentid, function (studentName) {
newresult.push({studentname: studentName});
})
}
console.log(newresult);
callback(null, newresult)}
});
}
});
}
var getstudentObjectId = function(id)
{
return student.db.bson_serializer.ObjectID.createFromHexString(id);
}
var getStudentName = function(id, callback)
{
student.findOne({_id: getstudentObjectId (id)}, function(e, o){
console.log(o.name);
callback(o.name);
});
}
关键字标记DoSomethingBigger
方法,您可以隐藏初始的new
方法,而不是覆盖它。
您应该以这种方式重写代码,以使其正常工作
DoSomethingBigger
答案 1 :(得分:2)
您没有在第3类中重写该方法,基本上是在创建一个基础不知道的全新方法。有关更多信息,请参见here。就像将BookWriter
中的方法名称更改为与DoSomethingElseAltogether()
这样完全不同的方法一样,现在很明显,您不能从基类中调用它。
相反,您应该在第三类中重写:
public class BookWriter : Writer
{
protected override void DoSomethingBigger()
{
Console.WriteLine("I'm writting a book");
}
}