非常短的C#功能。
public static int SizeInBytes(this byte[] a)
{
return sizeof (int) + a.Length*sizeof (byte);
}
“this”关键字在此函数中的含义是什么?在C ++中,这个关键字的等价物是什么?此外,这个功能试图准确计算什么?
答案 0 :(得分:8)
它将方法标记为extension method。
扩展方法允许您扩展任何类的功能,即使它是密封的。
示例:
public static class StringExtensions { public static bool IsEmpty(this string s) { return s == string.Empty; } }
请注意,正确的语法包括静态类中的静态方法,以及 this 关键字的使用。
对于你的第二个问题,在C ++中有一个等同于 this .....它这个。但是,C ++不支持扩展方法,所以你永远不会像在你提供的代码片段中那样在C ++中看到它。
答案 1 :(得分:7)
它是C#中extension methods使用的语法。这是不 C ++。
这意味着如果变量byte[]
表示buffer
,并且扩展方法在范围内(例如,导入了名称空间),则可以执行以下操作:
int buffSize = buffer.SizeInBytes();
此语法是纯syntactic sugar - 编译器将此转换为对静态方法的调用(在所需的静态类上),并将byte[]
作为第一个参数传递。因此,您可以在C ++中编写等效语句,但不能获得C#编译器为您提供的优秀语法糖。