我有一个用于扩展方法的代码,看起来很像行
ifstream
这是我拥有的扩展类,但我需要的是
parent class
{
int i = 9; // the value was i was 9;
i = i.Add(2); // here 9 + 2
Console.WriteLine(i); // it is printing 11
}
extension class
{
public static int Add(this int firstInteger, int secondInteger)
{
return (firstInteger + secondInteger);
}
}
我找不到解决方法,请推荐解决方案。
答案 0 :(得分:7)
首先,我强烈建议您不这样做。这很违反直觉。
但是从C#7.2开始,这种 是可能的-仅适用于值类型-使用ref
扩展方法。只需将第一个参数更改为具有ref
修饰符,然后为其分配:
using System;
public static class Int32Extensions
{
public static void Add(ref this int x, int y)
{
x = x + y;
}
}
class Test
{
static void Main()
{
int i = 9;
i.Add(2);
Console.WriteLine(i); // 11
}
}
i.Add(2)
调用是隐式的:
Int32Extensions.Add(ref i, 2);
如果您尝试在不是变量的对象上调用它,它将失败。
但是对于许多C#开发人员来说,这确实是令人惊讶的行为,因为ref
是隐式的。对于引用类型也无效。