输出结果abstract class BaseClass { public virtual bool MethodA() { return true; } public virtual string MethodB() { return "0"; } } class Class1:BaseClass { public override bool MethodA() { return false; } public override string MethodB() { return "1"; } } class Class2:Class1 { new public string MethodB() { return "2"; } } class MainClass { public static void Main(string[] args) { Class2 o = new Class2(); Class2 q = new Class2(); Console.WriteLine(o.MethodA()); Console.WriteLine(q.MethodB()); } }
时间: 2024-02-15 12:27:14 浏览: 24
输出结果为:false和"2"。
解释:
- Class2是从Class1继承而来的,而Class1又是从BaseClass继承而来的。
- Class2重新定义了MethodB,使用了new关键字,这意味着Class2中的MethodB将会隐藏从BaseClass和Class1继承而来的MethodB。
- 当调用o.MethodA()时,由于Class2没有重写MethodA,所以会调用从Class1继承而来的MethodA,其返回值为false。
- 当调用q.MethodB()时,由于Class2重新定义了MethodB,所以会调用Class2中的MethodB,其返回值为"2"。
相关问题
protected virtual bool Init() { return true; }
这是一个虚函数,它被声明为 `protected`,意味着只有该类的成员函数或者该类的子类可以访问它。函数名为 `Init()`,返回类型为 `bool`。在该函数内部,执行一些初始化操作,并根据初始化结果返回 `true` 或 `false`。由于它是虚函数,所以可以在子类中进行重写,实现不同的初始化逻辑。
public virtual bool Delete(dynamic id) { return CurrentDb.DeleteById(id); } public virtual bool Delete(T data) { return CurrentDb.Delete(data); }怎么调用第二个方法举个例子
假设你有一个名为`person`的实体类,你可以这样调用第二个方法:
```
Person p = new Person();
p.Id = 1; // 假设你要删除Id为1的Person对象
bool result = CurrentDb.Delete(p);
```
其中,`CurrentDb`是你的数据访问对象,`p`是你要删除的实体对象,`result`是一个bool类型的变量,表示删除操作是否成功。请注意,第二个方法需要传入一个实体对象作为参数,而第一个方法需要传入实体对象的Id值。