何时使用此关键字作为函数参数

时间:2011-03-31 12:58:30

标签: c# .net syntax extension-methods

  

可能重复:
  What does “this” mean in a static method declaration?

我浏览了一段代码片段,发现这个关键字用作函数参数。 代码片段就像

public static void AddCell(this Table table, object cell) 

为什么AddCell的this关键字可以写成AddCell(Table table, object cell)

请说明何时使用此关键字作为函数参数与小代码示例的情况,因此我可以更好地理解。感谢。

5 个答案:

答案 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()