1

クラスを理解しようとしSystem.Exceptionていますが、オーバーライド機能に問題があります。DivideByZeroの例外をインターセプトして、派生クラスの関数で生成したユーザー メッセージを書き込もうとしていますSystem.Exception。これは私のコードです:

public class zeroDivision
{
    public void Deleter()
    {
        double z; int i = 0;
        try
        {
            z = 10 / i;
            Console.WriteLine("N={0} i={1} Result={2}", 10, i, z);
        }
        catch (zeroMessage e) **<====problem here: DivideByZeroException**
        {
            Console.WriteLine("N={0} i={1} Result={2}", 10, i, e.Message);
        }     
    }
}
public class zeroMessage : System.Exception <--here debugger even doesn't come
{        
    public override string Message
    {            
        get
        {
            string msg = base.Message;
            msg = "Деление на ноль ЗАПРЕЩЕНО!!!";    
            return msg;
        }            
    }
}

class Program
{
    static void Main(string[] args)
    {           
        zeroDivision zero = new zeroDivision();
        zero.Deleter();

        Console.Read();
    }
}

私が呼び出すと: catch(zeroMessage e) - 未処理ですが、呼び出すと: catch(Exception e) - 動作します。私のせいはどこですか?理解できない

-------------------------------

フォーラムのマスターの助けを借りて、このタスクを機能する関数で作り直しました。多分それは誰にとっても役に立つでしょう:

public class zeroDivision
{
    public void Deleter() //First way
    {
        double z; int i = 0;
        try
        {
            z = 10 / i;
            Console.WriteLine("N={0} i={1} Result={2}", 10, i, z);
        }
        catch (DivideByZeroException)
        {
            Console.WriteLine("N={0} i={1} Result={2}", 10, i, "Делить на ноль НИЗЗЯ!!!");                
        }     
    }

    public double Deleter2(int a, int b) //Second way
    {            
        if (b == 0) throw new zeroMessage();
        return a / b;
    }

    public void prn(int i, int j) //Third way
    {
        try
        {
            Console.WriteLine(Deleter2(i, j));
        }
        catch (zeroMessage z)
        {
            Console.WriteLine(z.Message);
        }
    }

    public void firstDeleter() //Updated Yesterday's code - Forth way
    {
        double z; int i = 0;
        try
        {
            if (i == 0) throw new zeroMessage(); //!!!
            z = 10 / i;
            Console.WriteLine("N={0} i={1} Result={2}", 10, i, z);
        }
        catch (zeroMessage e) 
        {
            Console.WriteLine("N={0} i={1} Result={2}", 10, i, e.Message);
        }             
    }          

}

public class zeroMessage : System.Exception
{        
    public override string Message
    {            
        get
        {
            string msg = base.Message;
            msg = "Деление на ноль ЗАПРЕЩЕНО!!!";    
            return msg;
        }            
    }
}

class Program
{
    static void Main(string[] args)
    {           
        zeroDivision zero = new zeroDivision();
        zero.Deleter();

        try
        {
            double result = zero.Deleter2(10, 0);
            Console.WriteLine(result);
        }
        catch (zeroMessage z)
        {
            Console.WriteLine(z.Message);
        }

        zeroDivision zero1 = new zeroDivision();
        zero1.prn(10, 0);

        zeroDivision zero2 = new zeroDivision();
        zero2.firstDeleter();

        Console.Read();
    }
}
4

3 に答える 3