我浏览了一段代码片段,发现这个关键字用作函数参数。 代码片段就像
public static void AddCell(this Table table, object cell)
为什么AddCell的this
关键字可以写成AddCell(Table table, object cell)
请说明何时使用此关键字作为函数参数与小代码示例的情况,因此我可以更好地理解。感谢。
答案 0 :(得分:2)
基本上,您的示例中定义的是扩展方法。在静态方法中,如果使用this关键字定义第一个参数,则允许在第一个参数上定义的类型的实例对象上调用该方法。
在你说的例子中,你可以做这样的事情:
Table someTableInstance; /// must be instanciated somehow;
someTableInstance.AddCell(cell); // Call the AddCell method as if it was an instance method.
希望它有所帮助, 问候, 布鲁诺
答案 1 :(得分:1)
this
是创建extension methods的关键字。
这样,虽然我没有更改Table
的实现,但我可以在AddCell
的成员上调用方法Table
。
MSDN:
扩展方法可让您“添加” 没有的现有类型的方法 创建一个新的派生类型, 重新编译或以其他方式修改 原始类型。扩展方法 是一种特殊的静态方法, 但他们被称为好像他们一样 扩展类型的实例方法。 对于用C#编写的客户端代码 Visual Basic,没有明显的 呼叫之间的区别 扩展方法和方法 实际上是在一个类型中定义的。
答案 2 :(得分:1)
宣布extension method。关键在于
MyStaticClass.AddCell(table, cell);
你现在可以致电
table.AddCell(cell);
假设MyStaticClass位于您using
编辑的当前命名空间或命名空间中。
答案 3 :(得分:1)
'this'关键字用于创建扩展方法。例如,如果要使用要在不继承新派生类型的情况下添加方法的库类,则可以创建静态扩展方法。语法 - 糖将常规静态方法放在已知类型上。
例如:
public static int ToNumber( this string numberString )
{
int convertedInt = 0;
// logic goes here to convert to an int
return convertedInt;
}
可以像这样调用:
string myNumberString = "5";
int num = myNumberString.ToNumber();
您不必创建一个继承的类来执行此操作,但它可以干净地读取。
答案 4 :(得分:1)
此语法用于扩展方法。
当你第一次看到它们时,这些看起来有点奇怪,但它们是很棒的东西 - Linq的大多数都是作为扩展方法编写的。
这是一个很好的介绍教程 - http://csharp.net-tutorials.com/csharp-3.0/extension-methods/ - 其中包括示例:
public static class MyExtensionMethods
{
public static bool IsNumeric(this string s)
{
float output;
return float.TryParse(s, out output);
}
}
可让您致电:
"fred".IsNumeric()