C#抽象方法重写
C#中抽象方法重写,如果抽象类中只有一个抽象方法,该抽象类没有字段、方法、构造函数,那么在子类中可以使用base关键字吗?如果可以,那base里面改写什么?...
C#中抽象方法重写,如果抽象类中只有一个抽象方法,该抽象类没有字段、方法、构造函数,那么在子类中可以使用base关键字吗?如果可以,那base里面改写什么?
展开
4个回答
展开全部
base可以用在抽象中,但不是这么用。看看语法就知道了,里面写的很明白“base 关键字用于从派生类中访问基类的成员:调用基类上已被其他方法重写的方法。指定创建派生类实例时应调用的基类构造函数。”
所以使用base调用基类的方法的话,该方法必须是实例方法,抽象方法是不会出现在base.里面的。
例如:
public abstract class A
{
public abstract int AA(int x);
}
public class B : A
{
public override int AA(int x)
{
return x + 1;
}
}
public class C : B
{
public int CC(int x)
{
int i = base.AA(x);
return i + 1;
}
}
展开全部
base可以用在抽象中,但不是这么用
你好好看看语法就知道了,里面写的很明白“base 关键字用于从派生类中访问基类的成员:调用基类上已被其他方法重写的方法。指定创建派生类实例时应调用的基类构造函数。”
所以你使用base调用基类的方法的话,该方法必须是实例方法,抽象方法是不会出现在base.里面的。
你好好看看语法就知道了,里面写的很明白“base 关键字用于从派生类中访问基类的成员:调用基类上已被其他方法重写的方法。指定创建派生类实例时应调用的基类构造函数。”
所以你使用base调用基类的方法的话,该方法必须是实例方法,抽象方法是不会出现在base.里面的。
追问
抽象类没有字段、方法、构造函数,那么在子类中可以使用base关键字吗?会报错吗?
追答
唔,都说了base只能用在实例上,你用在抽象上当然会报错了。
但是你可以针对实现了抽象的类用,比如
public abstract class A
{
public abstract int AA(int x);
}
public class B : A
{
public override int AA(int x)
{
return x + 1;
}
}
public class C : B
{
public int CC(int x)
{
int i = base.AA(x);
return i + 1;
}
}
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
base是引用父类的关键字,一般在构造函数后面可以加:base()调用父类的构造函数,其次是在任意子类成员内使用base.父类成员,引用父类实现。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
base是继承啊应该override
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询