初次使用try-catch遇到的问题

    class UseException
    
{
        
private int smallNum;
        
public UseException()
        
{
            smallNum
=0;
        }

        
public UseException(int num)
        
{
            
if(num>100)
                
throw new ArgumentOutOfRangeException("输入值太大");
            
else
                smallNum
=num;
        }

        
public int SmallNum
        
{
            
get
            
{
                
return smallNum;
            }

        }

    }

    
class Test
    
{
        
static void Main(string[] args)
        
{
            
try
            
{
                UseException example
=new UseException(10);
            }
    
            
catch(ArgumentOutOfRangeException e)
            
{
                Console.WriteLine(e.Message);
            }

            Console.WriteLine(
"number={0}",example.SmallNum);

        }

    }


编译时出错:找不到类型或命名空间名称“example”(是否缺少 using 指令或程序集引用?)
但是如果将初始化语句改成UseException example=new UseException(1000);则可以抛出异常,去掉try-catch块后也可以运行。

我在CSDN上问了一下,得到的答复是
     “因为你的example是在try块里面定义的,出了try块就被释放掉,执行到
        Console.WriteLine("number={0}",example.SmallNum);
     就会说找不到这个对象。

     你初始值为1000,
        if(num>100)
        throw new ArgumentOutOfRangeException("输入值太大");
     就会被抛出一个异常,能够被捕获到。”
并且看到了个解决方法,将try-catch结构改成:

            UseException example=null;
            
try
            
{
                example
=new UseException(10);
            }
    
            
catch(ArgumentOutOfRangeException e)
            
{
                Console.WriteLine(e.Message);
            }

            Console.WriteLine(
"number={0}",example.SmallNum);


null不能丢,否则一样报错。得到的解释是:
    “在一个方法里,通过一个引用调用一个对象的方法(或属性)之前,此引用必须先被定义或赋值”
我觉得try-catch在在方面与函数类似。比如

    class c1
    
{
        
public static int i=0;
    }

    
class Test
    
{
        
public static void fun()
        
{
            c1.i
+=6;
        }


        
static void Main(string[] args)
        
{
            fun();
            Console.WriteLine(
"i="+c1.i);
        }

    }

c1.i的值可以被Test.fun方法所影响。当然,如果把c1.i的static去掉,再在fun里重新初始化一个对象,就不会被改动
    class c1
    
{
        
public int i=0;
    }

    
class Test
    
{
        
public static void fun()
        
{
            c1 c
=new c1();
            c.i
+=6;
        }


        
static void Main(string[] args)
        
{
            c1 c
=new c1();

            fun();
            Console.WriteLine(
"i="+c.i);

        }

    }

posted on 2005-03-25 09:29  天蓝  阅读(1116)  评论(0编辑  收藏  举报