日期:2014-05-18  浏览次数:20841 次

初学C#的超级小白求前辈指点一个小问题。
下面这段代码中为什么显示waiter类和cooker类中的输出函数不能调用name+字符串,提示非静态字段要求对象引用
而customer类中却可以?

namespace hotel
{
  public class customer
  {
  public string name;
  public customer(string name)
  {
  this.name = name;
  }
  public void diancai(string x)
  {
  Console.WriteLine(name + "点了一道" + x);
  waiter.chuancai(x);

  }
   
  }
  public class waiter
  {
  public string name;
  public waiter(string name)
  {
  this.name = name;
  }
  public static void chuancai(string x)
  {
  Console.WriteLine("服务员"+name+"告诉厨师"+"炒"+x );
  cooker.chaocai(x);
  }

  }
  public class cooker
  {
  public string name;
  public cooker(string name)
  {
  this.name = name;
  }
  public static void chaocai(string x)
  {
  Console.WriteLine("厨师"+name+"开始炒"+x);
  }

  }

------解决方案--------------------
public static void chaocai(string x)
{
Console.WriteLine("厨师"+name+"开始炒"+x);
}
静态方法只能调用静态字段,你把字段设置成静态就可以了。这样:
public static string name;
------解决方案--------------------
chuancai是static方法,他没有this指针,所以不知道name是谁,你要不就把name也声明为static,要不就在chuancai中传入类指针,通过指针访问name,比如
C# code

  public class waiter
  {
  public string name;
  public waiter(waiter w,string name)
  {
  this.name = name;
  }
  public static void chuancai(waiter w,string x)
  {
  Console.WriteLine("服务员"+w.name+"告诉厨师"+"炒"+x );
  cooker.chaocai(x);
  }

  }

------解决方案--------------------
静态的东西是属于类的,不需要申明一个类的对象,而非static是属于类的对象的,一定要声明对象才能调用
------解决方案--------------------
name是实例对象的字段,静态方法中不能使用实例对象的字段。