小编Sha*_*ood的帖子

C#中的继承问题没有调用基类构造函数

我想知道为什么我没有在下面的代码中收到错误.我在基类中没有定义构造函数,但在派生类中定义了一个构造函数.代码仍按预期运行.有人可以帮助我摆脱困惑.

class Shape
{
    public void Area()
    {
        Console.WriteLine("I am  a shape");
    }
}

class Circle : Shape
{
    double radius;
    const double pi = 3.14;

    public Circle(double rad)
    {
        radius = rad;
    }

    public new double Area()
    {
        return pi * radius * radius;
    }
}
Run Code Online (Sandbox Code Playgroud)

代码编译完美,并给我想要的结果.谢谢,

class Progam
{
    static void Main(string[] args)
    {
        Shape s1 = new Shape();
        s1.Area();

        Shape s2 = new Circle(10);
        s2.Area();

        Circle c1 = new Circle(4.0);
        Console.WriteLine(c1.Area());
    }
}
Run Code Online (Sandbox Code Playgroud)

c# inheritance constructor

3
推荐指数
1
解决办法
88
查看次数

C# 异常处理finally 块在catch 块之前

我对 C# 中如何抛出异常感到非常困惑。如果在 try 块中发生异常,1.它会被抛出到 catch 块,2.当且仅当 catch 块捕获它时,finally 块才会被执行。3.finally 块最后执行,前提是 catch 语句捕获了它。

但是,当我尝试运行下面的程序时,输出是A,B而不是BA。我的理解有问题吗?谢谢。

class Program
 {
     public static void Main(string[] args)
     {
         try
         {
             int a = 2;
             int b = 10 / a;
             try
             {
                 if (a == 1)
                     a = a / a - a;
                 if (a == 2)
                 {
                     int[] c = { 1 };
                     c[8] = 9;
                 }
             }
             finally
             {
                 Console.WriteLine("A");
             }
        }
        catch (IndexOutOfRangeException e)
        {
             Console.WriteLine("B");
        }
        Console.ReadLine();
    }
 }
Run Code Online (Sandbox Code Playgroud)

异常发生在a==2处,我知道外层catch会捕获这个异常。然而finally是先被执行的吗?有什么理由说明为什么会出现这种情况吗?

已编辑 …

c# exception

1
推荐指数
1
解决办法
1722
查看次数

标签 统计

c# ×2

constructor ×1

exception ×1

inheritance ×1