与实例化/继承相关的错误 class 不能用 try~catch 语句处理吗?

Can't errors related with instantiating / inheriting class be treated by try~catch statement?

我希望 运行 下面的 C# 代码来练习抽象/密封的用法 classes :

using System;

abstract class Person
// abstract : can be inherited but can't be instantiated
{
    public Person()
    {
        Console.Write(this + " : ");
    }
}

sealed class MichaelJackson : Person
// sealed : can't be inherited but can be instantiated
{
    public void Say()
    {
        Console.WriteLine("Billie Jean is not my lover.");
    }
}

class BilleJean : MichaelJackson
// An error will occurs because it tries to inherit a sealed class
{
    public void Say()
    {
        Console.WriteLine("You are the one.");
    }
}


class MainClass
{
    static void Main(string[] args)
    {
        
        try
        {
            new Person();
            // An error will occurs because it tries to be instantiated as an abstract class
        }
        catch (Exception e)
        {
            Console.WriteLine("Abstract class can't be instantiated.");
        }

        new MichaelJackson().Say();

        try
        {
            new BilleJean().Say();
        }
        catch (Exception e)
        {
            Console.WriteLine("MichaelJackson : The kid is not my son");
        }
    }
}

如您所知,抽象class Person不能直接实例化,密封class MichaelJackson也不能被其他class BillieJean.

我的意思是得到如下结果,但代码没有 运行 尽管我添加了 try~catch 语句。

Abstract class can't be instantiated.
MichaelJackson : Billie Jean is not my lover.
MichaelJackson : The kid is not my son.

我该如何解决这个问题?

try-catch 块仅捕获 运行 个时间错误,a.k.a 个异常。如果我没记错的话,你得到的一定是编译时错误。你能验证一下吗?此外,您的 IDE 应该显示错误。

您混淆了编译错误和运行时间异常。

试图继承密封的class会产生编译错误。这意味着不会创建可执行文件,您将无法 运行 您的代码。

try-catch 语句在 运行 时间捕获异常。例如,它可能会捕获“被 0 除”异常,但它无法捕获编译器抱怨的语法错误或逻辑错误。

术语“运行time”是指代码为运行ning的时间。这意味着编译器成功创建了一个可执行文件,您可以启动它。当出现警告(绿色波浪线)、代码问题或提示(蓝色波浪线)时,编译器可以编译成功,但当出现错误(红色波浪线)时,编译器无法编译。