格式:修饰符 delegate 返回值类型 委托名 ( 参数列表 );
例子:
public delegate void MyDelegate();
个人理解,类似js的函数表达式。就是将一个方法的引用。
比如:
MyDelegate myDelegate = new MyDelegate(Test.SayHello); // Test是一个类,SayHello是它的方法。
myDelegate(); // 相当于执行了Test.SayHello();
// 相当于js的:
var f = function () {...}
f();
匿名委托: 就更像js的匿名函数的表达式了。
MyDelegate myDelegate = delegate {
Console.WriteLine("Hello world!");
}
委托用途:
C#2.0推出的语法。
泛型方法: 可理解为类型的参数。
例如:
private static void Add<T>(T a, T b) {...} // 定义泛型T
xx.Add<int>(3, 4); // 调用方法时,给T赋值为int,则参数a和b就是int类型。
所以,T实际是参数a、b的类型,在调用方法时传入。
泛型类: 可理解为在类的级别上定义,定义后,类的内部都可以使用。实例化类时,是需要给与实参。
泛型集合: 泛型中最常见的应用,主要用于 约束 集合中存放的元素。
非泛型集合中的 ArrayList、Hashtable 在泛型集合中分别使用 List 和 Dictionary
例如:
// 普通ArrayList,里面有不同类
ArrayList list = new ArrayList() { "aaa", "bbb", "abc", 123, 456 }; 型的数据。
// 泛型ArrayList,记作List
List<int> list = new List<int>(); // 那么这个list只能包含int类型的数据。
可空类型:
定义方法:System.Nullable 变量名;
简化写法: Nullable 变量名;
语法糖:T? 变量名;如:
int? a = null;
C# 2.0 引入了局部类型的概念。局部类型允许我们将一个类、结构或接口分成几个部分,分别实现在几个不同的.cs文件中,在类声明前添加partial关键字即可。
局部类型是一个纯语言层的编译处理,不影响任何执行机制——事实上C#编译器在编译的时候仍会将各个部分的局部类型合并成一个完整的类。
例如:
public partial class Program
{
static void Main(string[] args) { }
}
partial class Program
{
public void Test() { }
}
params: 使用 params 关键字可以指定采用数目可变的参数的方法参数。 参数类型必须是一维数组。
例如:
public static void UseParams(params int[] list) {...}
UseParams(1, 2, 3, 4); // 调用方法时,会将1,2,3,4传入list
ref: ref 关键字指示按引用传递值。类似php的 f(&$a),例如:
void Method(ref int refArgument)
{
refArgument = refArgument + 44;
}
int number = 1;
Method(ref number);
Console.WriteLine(number);
// Output: 45
out: 类似ref,但可以传空指针。如:
void xxx(out int i) { i = 123; }
int n;
xxx(out n); // n = 123