我想知道为什么我没有在下面的代码中收到错误.我在基类中没有定义构造函数,但在派生类中定义了一个构造函数.代码仍按预期运行.有人可以帮助我摆脱困惑.
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# 中如何抛出异常感到非常困惑。如果在 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是先被执行的吗?有什么理由说明为什么会出现这种情况吗?