C#的类可以有内隐类(即可以在类中定义类),但是在方法中能否再定义一个方法呢?   
  比如   
    
 public   void   test()
 {   
      public   void   test1(int a,bool cancel)
      {   
          
      }      if(aa>0)
      {
        test1(aa,true);
      }
      else
         test1(aa,false);  }   
    
  能否能象上面这样呢在test方法中再声明个方法test1呢?javascript是可以这样作的。我的目的:因为我在写一个方法的时候在多处的代码都是重复的,所以需要提取出一个方法test1来供test的多处调用,但是test1要共享一些test中的内部变量。大家来讨论下,是否有其他变通的方法。

解决方案 »

  1.   

    如果是web的话,输出是一段脚本能达到目的不
      

  2.   

    to khijfv2008() :
    我的这个问题纯属C#的问题,不关web的事情
      

  3.   

    方法之间调用:
    把方法test1(int a,bool cancel) 定义到test()外面,然后在方法test()中调用test1好了
      

  4.   

    楼主可能是受到了javascript的影响了吧?
      

  5.   

    C#2.0 多了一个匿名方法(Anonymous Methods),但绝对不是楼主这个东东大多数编程语言只支持方法的调用,不支持方法的嵌套
      

  6.   

    C#中方法又不是对象,不象javascript
      

  7.   

    to penglewen(昨日如梦)
    ------------------------
    不明白你的意思
      

  8.   

    public   void   test1(int a,bool cancel)
          {   
              
          }
     public   void   test()
     {         if(aa>0)
          {
            test1(aa,true);
          }
          else
             test1(aa,false);  }这样子不是最简单吗?
      

  9.   

    to daishengs(横舟摆渡) 
    因为test()中还有8、9个局部变量,在test1方法中都要用到这些变量,不可能为每个变量都在test1(……)中加入参数吧???这样就变得复杂了,最好的就是在方法内有一种类似嵌套方法的形式,来共享这些局部变量
      

  10.   

    .net是面向对象的,不是面向方法的,需求首先考虑在对象上的实现而不是方法。“8、9个变量”?就算1w个变量,你也可以写进一个对象里边去,没有什么不方便的。除非你不打算设计对象。
      

  11.   

    前几天在另一个帖子上也谈到关于“SQL能不能写反映逻辑”的问题,于此有点类似。不管你是否深入理解OOAD,如果只会写int、string、DateTime等基本的值类型作为代码的对象,不会自己明确地设计新类型,那么就会使得OO的能力退化。就这个问题来说,test1所需要的参数完全可以面向对象地设计、封装成一个或者几个对象。其实问题出在人的主观愿望:宁愿写一堆低级类型的变量也不愿意抽象一下。
      

  12.   

    “因为我在写一个方法的时候在多处的代码都是重复的,所以需要提取出一个方法test1来供test的多处调用”这个与c#的“匿名方法”根本不是一类东西。匿名方法必须紧密地与上下文在一起才能起作用。如果c#的方法允许一个独立定义的方法想当然地去“取得”上下文的变量,我看c#语言就快变成那些被淘汰的语言一样地靠简单的“动态”来吸引非程序员了。
      

  13.   

    就这个问题来说,test1所需要的参数完全可以面向对象地设计、封装成一个或者几个对象。其实问题出在人的主观愿望:宁愿写一堆低级类型的变量也不愿意抽象一下。
    -------------------------------------------------------------不是什么东西都应该一定要用OO的,因为涉及到的局部变量多而杂,没有必要去封装到对象去,而且这样一来代码量很大,所谓存在即有理,delphi中就有这样的用法。
    C# 2.0中的匿名方法的确可以解决我的这个问题,效果和我想的是一样的,而且很自然。
      

  14.   

    zhangking:
    "重载"overload?应该 不行哦
      

  15.   

    haolaiwu(宁愿相信世界上有鬼,也不相信女人那张嘴) ( ) 信誉:100    Blog   加为好友  2007-5-5 20:01:31  得分: 0  
     
    因为涉及到的局部变量多而杂,没有必要去封装到对象去。--这是什么理由啊。  
     
      

  16.   

    "多处的代码都是重复的"匿名方法,找到适合的场合用,在java中已经修正并不推荐匿名方法。
    "多处的代码都是重复的","因为涉及到的局部变量多而杂",阅读下"重构",好的意见希望能够虚心接受。
    我的建议就是希望你能够重构你的代码,再设计的重复三遍,目标(重用性,灵活性,扩展性).
      

  17.   

    haolaiwu(宁愿相信世界上有鬼,也不相信女人那张嘴) ( ) 信誉:100    Blog   加为好友  2007-5-5 20:01:31  得分: 0  
     
    因为涉及到的局部变量多而杂,没有必要去封装到对象去。
    ------------------------------------------------------这说明你的设计有问题。javascript一个方法就是一个对象,所以面向对象实现起来也不是很自然。
      

  18.   

    Ivony(授人以鱼不如授人以渔,上海谋生) :
    多谢指点!
      

  19.   

    zhangking(网眼-why100000.com) :
    只是举例而已,这个程序现在的代码肯定是不对的,c#是不支持方法嵌套的
      

  20.   

    namespace都可以嵌套namespace,class嵌套class就不用说了!
      

  21.   

    JavaScript是基于对象,面向过程的语言,而且是弱类型的...这个和C#是完全两个层次的差距,一愣一概要求...