Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/132.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 什么';“的意思是什么;这";关键字在这里?_C#_C++_This - Fatal编程技术网

C# 什么';“的意思是什么;这";关键字在这里?

C# 什么';“的意思是什么;这";关键字在这里?,c#,c++,this,C#,C++,This,非常短的C#函数 public static int SizeInBytes(this byte[] a) { return sizeof (int) + a.Length*sizeof (byte); } “this”关键字在此函数中的含义是什么?C++中这个关键字的等价物是什么?此外,这个函数要精确计算什么 它将该方法标记为一个 扩展方法允许您扩展任何类的功能,即使它是密封的 例如: public static class StringExtensi

非常短的C#函数

    public static int SizeInBytes(this byte[] a)
    {
        return sizeof (int) + a.Length*sizeof (byte);
    }
“this”关键字在此函数中的含义是什么?C++中这个关键字的等价物是什么?此外,这个函数要精确计算什么

它将该方法标记为一个

扩展方法允许您扩展任何类的功能,即使它是密封的

例如:

public static class StringExtensions { public static bool IsEmpty(this string s) { return s == string.Empty; } } 公共静态类扩展 { 公共静态bool为空(此字符串为s) { 返回s==string.Empty; } } 注意,正确的语法包括静态类中的静态方法,以及this关键字的使用

对于第二个问题,C++中有一个等价的<强> <强>。这是这个。但是,C++不支持扩展方法,所以在C++中,你永远不会看到它,就像你所提供的代码片段一样。这是<强>不< /强> C++ > < /p> 这意味着,如果您有一个由变量
buffer
表示的
字节[]
,并且扩展方法在范围内(例如导入命名空间),则可以执行以下操作:

int buffSize = buffer.SizeInBytes();

此语法是纯语法-编译器将其转换为对静态方法的调用(在所需的静态类上),将
字节[]
作为第一个参数传入。这样,你可以在C++中写等价的,但不能得到C编译器给你的好的语法糖。如果它是用在THATER之外的,那么,如果我想把这个“扩展方法”的行为应用到C++中,那是可能的吗?@德里克-我不知道有什么办法。@ Delkh:C++有凯尼格查找(AKA)依赖于参数的查找“,它比C扩展方法更强大。C++具有自由函数,扩展方法远不是惯用的。