# 声明委托

> 委托三步曲:**声明**委托 -> **实例化**委托 -> **调用**委托;
> 声明委托是使用委托的第一步。

委托通常在三个地方声明:

+ 名字空间:
  > 可见范围:程序集内或引用了程序集,无需使用using引入即可使用

  ``` CSharp
        using System;

        //命名空间同级:调用方只需要引用定义类库就能使用;不需要使用Uing语句引入定义委托的命名空间。
        public delegate string GlobalDelegate();

        namespace DelegateDemo
        {
            ......
        }
  ```
+ 类同级:
  > 委托本质是和一样的自定义类型,和类同级。所以,能声明类的地方也能声明委托,可见范围与类相似。
  ``` CSharp
    using System;
    namespace DelegateDemo
    {
        //类同级:最常用和推荐的,可见范围与使用方法与类相同。
        public delegate string ClassLevelDelegate();

        public class OtherClass
        {
            ......
        }
    }
  ```
+ 类内部,与类中方法同级:
  > 可见范围与类内方法相同;调用时,要先指定类:类名.委托名
  ``` CSharp
    using System;
    namespace DelegateDemo
    {
        public class DemoClass
        {
            //类内部方法同级:可见范围与使用方法与类中方法相似,调用方须先调用类,后再调用委托。
            public delegate string InsideDelegate();

            //类内方法
            public string GetName()
            {
                //方法体内:不允许定义委托
                return "DeclearDelegate";
            }

            /// <summary>
            /// 小写字串
            /// </summary>
            public static string ConvertToLower(string source)
            {
                return source.ToLower();
            }
        }
    }
  ```
  

文件说明:
> 可以与其它类在同一个.cs文件里,也可以单独成一个文件或集中到一个文件中便于管理。