将对象引用传递给方法,它必须是静态的
本文关键字:静态 对象引用 方法 | 更新日期: 2023-09-27 18:32:19
当我尝试一些代码来学习如何将对象的引用传递给方法时,当我尝试删除方法头中的静态时,我收到错误。错误消息说:非静态字段、方法或属性需要对象引用......但是参数中不是已经有引用了吗?我见过不使用静态的代码,那么为什么这不起作用呢?我知道当从非对象的类中使用方法时,会使用静态。一些解释是值得理解的。谢谢!
// Method
internal static string ChangeName(Box obj)
{
return obj.BoxName;
}
编辑:我添加了整个代码。我从主方法内部调用的问题是否是静态的?
class Program
{
static void Main(string[] args)
{
Box box1, box2;
box1 = new Box("Nick","R90",1);
box2 = new Box("Hanna","B27",2);
Console.WriteLine(ChangeName(box2));
Console.Read();
}
// Methods
private static string ChangeName(Box obj)
{
return obj.BoxName;
}
}
静态方法的调用方式如下:
MyClass.Method(arg);
实例方法的调用方式如下:
MyClass myInstance = new MyClass();
myInstance.Method(arg);
两者不兼容。
如果要更改方法签名,还需要更改调用该方法的每个位置。
编辑:您正在使用非限定调用。以下是使用非限定调用的规则。
- 静态方法
- 可以调用静态方法。
- 静态方法不能调用实例方法。(这是你的问题。
- 实例方法可以调用静态方法。 实例方法
- 可以调用实例方法。
此方法实际上应该作为 Box 类中的实例方法实现。然后你会说:
Console.WriteLine(box2.ChangeName());
如果您无权访问 Box 代码,则可以编写扩展方法,或者根据示例将该方法保持静态。
错误可能出在您调用此方法的位置;如果从静态方法调用,则必须显式调用对象实例或调用静态方法。