开发者

When to use this keyword as function argument [duplicate]

开发者 https://www.devze.com 2023-02-20 20:03 出处:网络
This question already has answers here: Closed 11 years ago. Possible Duplicate: What does “this” mean in a static method declaration?
This question already has answers here: Closed 11 years ago.

Possible Duplicate:

What does “this” mean in a static method declaration?

i go through a code snippet and found this keyword is used as function argument. the code snippet is like

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

why AddCell has this keyword they can write likeAddCell(Table table, object cell)

please explain the situation when to use this开发者_JS百科 keyword as function argument with small code sample as a result i can better understand. thanks.


Basically what is being defined in your example is an extension method. In a static method, if you define the first argument using the this keyword you are allowing the method to be called on instance objects of the type defined on the first argument.

In the example you stated you would be able to do something like this:

Table someTableInstance; /// must be instanciated somehow;
someTableInstance.AddCell(cell); // Call the AddCell method as if it was an instance method.

Hope it helps, Regards, Bruno


This syntax is used for extension methods.

These look a bit odd when you first see them written, but they are fabulous things - most of Linq is written as extension methods.

Here's a good intro tutorial - http://csharp.net-tutorials.com/csharp-3.0/extension-methods/ - which includes the example:

public static class MyExtensionMethods
{
    public static bool IsNumeric(this string s)
    {
        float output;
        return float.TryParse(s, out output);
    }
}

which enables you to call:

"fred".IsNumeric()


this is the keyword for creating extension methods.

This way, while I have not changed the implementation of Table, I can call method AddCell on a member of Table.

MSDN:

Extension methods enable you to "add" methods to existing types without creating a new derived type, recompiling, or otherwise modifying the original type. Extension methods are a special kind of static method, but they are called as if they were instance methods on the extended type. For client code written in C# and Visual Basic, there is no apparent difference between calling an extension method and the methods that are actually defined in a type.


It's a declaring an extension method. The point is that as well as

MyStaticClass.AddCell(table, cell);

you can now just call

table.AddCell(cell);

assuming MyStaticClass is in the current namespace or namespaces you've usinged.


The 'this' keyword is used to create an extension method. For instance, if you are using a library class that you want to add a method to without inheriting a new derived type, you can create a static extension method. It is syntactical-sugar that places a regular static method onto an already known type.

For example:

public static int ToNumber( this string numberString )
{
  int convertedInt = 0;
  // logic goes here to convert to an int
  return convertedInt;
}

Can be called like this:

string myNumberString = "5";
int num = myNumberString.ToNumber();

You didn't have to create an inherited class to do this but it reads cleanly.

0

精彩评论

暂无评论...
验证码 换一张
取 消