将对象引用传递给方法,它必须是静态的吗?

时间:2012-04-26 19:51:03

标签: c#

当我尝试使用某些代码来学习将对象的引用传递给方法时,当我尝试删除方法头中的静态时出现错误。错误消息说:非静态字段,方法或属性需要对象引用......但是参数中是否没有引用?我见过不使用静态的代码,为什么这不起作用?我知道当从非对象的类中使用方法时会使用静态。理解一些解释是值得赞赏的。谢谢!

    // Method
    internal static string ChangeName(Box obj)
    {
        return obj.BoxName;
    }
编辑:我添加了整个代码。我在main方法中调用的问题是静态的吗?

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;
    }
}

2 个答案:

答案 0 :(得分:9)

静态方法的调用如下:

MyClass.Method(arg);

像这样调用实例方法:

MyClass myInstance = new MyClass();
myInstance.Method(arg);

两者不相容。

如果要更改方法签名,还需要更改调用方法的每个位置。

编辑:您正在使用不合格的电话。以下是使用不合格电话的规则。

  • 静态方法可以调用静态方法。
  • 静态方法无法调用实例方法。 (这是你的问题。)
  • 实例方法可以调用静态方法。
  • 实例方法可以调用实例方法。

这个方法应该真正实现为Box类中的实例方法。然后你会说:

Console.WriteLine(box2.ChangeName());

如果您无法访问Box代码,那么您可以编写扩展方法,或者按照您的示例保持方法静态。

答案 1 :(得分:2)

可能是错误是您调用此方法的地方;如果从静态方法调用,则必须显式调用对象实例或调用静态方法。