在这里,我可以从子类的实例和父类的引用变量调用父类方法。
public class A
{
public void showA()
{
Console.WriteLine("showA");
}
}
public class B:A
{
public void showB()
{
Console.WriteLine("showB");
}
}
public class Program
{
public static void Main(string[] args)
{
A obj = new B();
obj.showA(); //why I am not able to call obj.showB()
}
}
答案 0 :(得分:0)
继承C#的基本构建块。范式可以更容易理解为多态,特别是对于接口。在C#中,您无法从多个类继承,但可以继承多个接口。
要理解这个概念,我们将构建以下内容:
public interface IColor
{
void WriteColor();
}
上述内容并未实现任何逻辑,它充当意图声明。所以,我们现在将编写我们的课程。
public class Rectangle : IColor
{
public void WriteColor() => Console.WriteLine("Red");
}
public class Circle : IColor
{
public void WriteColor() => Console.WriteLine("Blue");
}
实施时,在创建矩形或圆形对象时,可以调用方法WriteColor
。但是,尽管你有相同的方法名称,但它们并不相同。这是通过多态性,您的接口允许逻辑分离。所以你有两个完全独立的实现。
另一种形式是直接通过一个类,根据你的继承方式创建不同的术语。
// Object:
public class ShapeColor
{
private string color;
public Color(string color) => this.color = color;
public string Color { get; } = color;
}
我们将创建一个shape对象,以展开示例:
// Shape: Object (Sub Class)
// ShapeColor: Base Object (Base Class)
public class Shape : ShapeColor
{
private string shape;
public Shape(string shape, string color) : base(color)
{
this.shape = shape;
}
public string TypeOfShape { get; } = shape;
}
因此,如果调用形状对象,在这种情况下基类需要一种颜色,因此您可以传递形状和颜色。为了进一步扩展,我们现在将创建下一个对象。
public class BuildShape : Shape
{
public void BuildRectangle()
{
var shape = new Shape("Rectangle", "Red");
Console.WriteLine(shape.TypeOfShape);
Console.WriteLine(shape.Color);
}
}
那是什么? BuildShape
可以从形状和形状颜色访问我们的属性,为什么?好吧,形状颜色被定义为基类,这意味着我们的形状取决于颜色。当我们从形状继承时,形状的类型被暴露。这是由于以下原因:
以上代表了我们的继承顺序。如果您感到困惑,我们可以通过解释来简化:
基类:base关键字用于从派生类中访问基类的成员
Sub Class&超类:类声明中的可选extends子句指定当前类的直接超类。一个类被认为是它所扩展的类的直接子类。直接超类是从其实现派生当前类的实现的类。
您可以阅读有关here主题的更多信息。