none
关于c#中main方法体内声明函数的疑问 RRS feed

  • 问题

  • 大家好! 为什么在main方法里构造一个函数是不对的?函数不能内嵌吗? 谢谢
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    namespace Csharp_Practice
    {
      class Program
      {
        static void Main(string[] args)
        {
          void myfunction()//为什么在main方法里声明一个方法是不对的?
          {
            return true;
          }
        }    
      }  
    }
    
    


    "I will love the light for it shows me the way, yet I will endure the darkness for it shows me the stars."-- Og Mandino (1923 - 1996)
    2011年7月27日 6:58

答案

  • 内嵌函数 (Inner Function) 是函数式编程的一个概念,即函数体中又声明函数。比如,在 JavaScript 中:

    function () {
        var f = function(a) { return a++; }; 
        alert(f(2));
    }

    是合法的。但对于 C#,内嵌函数需要通过匿名委托或者 Lambda 表达式实现,比如在 C# 中:

    public void Main()
    {
        Func<int> f = a => a++;
        MessageBox.Show(f(2));
    }

    能起到和 JavaScript 代码相同的作用。

    这里我不多解释这段代码,它涉及到很多问题,如果您有兴趣,可以继续发帖讨论。


    Mark Zhou
    • 已标记为答案 GaryJu 2011年7月27日 10:37
    2011年7月27日 9:06
  • 1. 首先Main本身就是一个方法,不能在方法里面声明方法,只能在类里面声明方法

    2.void myfunction(),你声明的这个方法是没有返回值的

    3.Main本身是一个静态方法,如果你在MAIN里面调用方法的话,只能调用静态方法,不能调用非静态方法


    http://blog.csdn.net/zx13525079024
    • 已标记为答案 GaryJu 2011年7月27日 10:37
    2011年7月27日 7:04

全部回复

  • 1. 首先Main本身就是一个方法,不能在方法里面声明方法,只能在类里面声明方法

    2.void myfunction(),你声明的这个方法是没有返回值的

    3.Main本身是一个静态方法,如果你在MAIN里面调用方法的话,只能调用静态方法,不能调用非静态方法


    http://blog.csdn.net/zx13525079024
    • 已标记为答案 GaryJu 2011年7月27日 10:37
    2011年7月27日 7:04
  • 谢谢你的回答!你的2和3是我的疏忽 - -!,关于1的问题是:内嵌函数是怎么一回事?
    "I will love the light for it shows me the way, yet I will endure the darkness for it shows me the stars."-- Og Mandino (1923 - 1996)
    2011年7月27日 7:10
  • 自己顶一下~!!
    "I will love the light for it shows me the way, yet I will endure the darkness for it shows me the stars."-- Og Mandino (1923 - 1996)
    2011年7月27日 7:20
  • 内嵌函数 (Inner Function) 是函数式编程的一个概念,即函数体中又声明函数。比如,在 JavaScript 中:

    function () {
        var f = function(a) { return a++; }; 
        alert(f(2));
    }

    是合法的。但对于 C#,内嵌函数需要通过匿名委托或者 Lambda 表达式实现,比如在 C# 中:

    public void Main()
    {
        Func<int> f = a => a++;
        MessageBox.Show(f(2));
    }

    能起到和 JavaScript 代码相同的作用。

    这里我不多解释这段代码,它涉及到很多问题,如果您有兴趣,可以继续发帖讨论。


    Mark Zhou
    • 已标记为答案 GaryJu 2011年7月27日 10:37
    2011年7月27日 9:06
  • 谢谢你的帮助!
    "I will love the light for it shows me the way, yet I will endure the darkness for it shows me the stars."-- Og Mandino (1923 - 1996)
    2011年7月27日 10:37