She*_*vek 6 c# extension-methods
我是Extension Methods的新手,并探索他们可以做些什么.
是否可以在没有特定赋值的情况下为调用对象分配输出?
这是一个简单的例子来解释:
public static string ExtensionTest(this string input)
{
return input + " Extended!";
}
Run Code Online (Sandbox Code Playgroud)
在以下示例中......
var foo = "Hello World!";
var foo2 = foo.ExtensionTest(); // foo2 = "Hello World! Extended!"
foo.ExtensionTest(); // foo = "Hello World!"
foo = foo.ExtensionTest(); // foo = "Hello World! Extended!"
Run Code Online (Sandbox Code Playgroud)
...有没有任何方法可以foo.ExtensionTest()在"Hello World! Extended!"没有特别指定的情况下获得结果foo = foo.ExtensionTest()
Kla*_*sen 13
不,但不起作用的原因与字符串的不变性有关,而与扩展方法无关.
如果你有一个班级:
public class SomeClass
{
public int Value {get; set;}
}
Run Code Online (Sandbox Code Playgroud)
并且扩展方法:
public static void DoIt(this SomeClass someClass)
{
someClass.Value++;
}
Run Code Online (Sandbox Code Playgroud)
会产生以下影响:
var someClass = new SomeClass{ Value = 1 };
someClass.DoIt();
Console.WriteLine(someClass.Value); //prints "2"
Run Code Online (Sandbox Code Playgroud)
你最接近这个(这将是奇怪的)将是接受一个out参数并将其用作返回值:
public static void ExtensionTest(this string input, out string output)
{
output = input + " Extended!";
}
Run Code Online (Sandbox Code Playgroud)
例:
string foo = "Hello World!";
foo.ExtensionTest(out foo);
Run Code Online (Sandbox Code Playgroud)
关于有趣的是,虽然它更紧密地类似于你问什么,它实际上稍微打字.
要明确:我不建议这样做,除非你对这种方法调用非常重要.另一位开发人员说出"WTF"的可能性?看到它必须是100%的东西.
| 归档时间: |
|
| 查看次数: |
4272 次 |
| 最近记录: |