初学C#的超级小白求前辈指点一个小问题。

hotywc 2012-03-23 04:50:30
下面这段代码中为什么显示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);
}

}
...全文
84 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
hotywc 2012-03-23
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 ghypnus 的回复:]

C# code

public void diancai(string x)
{
Console.WriteLine(name + "点了一道" + x);
waiter w = new waiter(name);
w.chuancai(x);
}

public void chuancai(string x)
……
[/Quote]
非常感谢,你这个方法很好!很适合我!
hotywc 2012-03-23
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 ghypnus 的回复:]

我总感觉3楼的回答不太适合你来用...
[/Quote]
确实,不过看起来很牛逼。。。
我刚才适用了一下,不会再主函数中调用…………
  • 打赏
  • 举报
回复
我总感觉3楼的回答不太适合你来用...
  • 打赏
  • 举报
回复

public void diancai(string x)
{
Console.WriteLine(name + "点了一道" + x);
waiter w = new waiter(name);
w.chuancai(x);
}

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

hotywc 2012-03-23
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 bdmh 的回复:]

chuancai是static方法,他没有this指针,所以不知道name是谁,你要不就把name也声明为static,要不就在chuancai中传入类指针,通过指针访问name,比如
C# code

public class waiter
{
public string name;
public waiter(waiter w,string name)
{
thi……
[/Quote]
厉害,一看就是高手
hotywc 2012-03-23
  • 打赏
  • 举报
回复
多谢各位大神,问题已经解决。
scjypzh 2012-03-23
  • 打赏
  • 举报
回复
name是实例对象的字段,静态方法中不能使用实例对象的字段。
hotywc 2012-03-23
  • 打赏
  • 举报
回复
把static都去掉也不行啊。
大神吗,帮帮忙……
迷茫的主宰 2012-03-23
  • 打赏
  • 举报
回复
你把waiter类和cooker类中static去掉。
faoyy 2012-03-23
  • 打赏
  • 举报
回复
静态的东西是属于类的,不需要申明一个类的对象,而非static是属于类的对象的,一定要声明对象才能调用
bdmh 2012-03-23
  • 打赏
  • 举报
回复
chuancai是static方法,他没有this指针,所以不知道name是谁,你要不就把name也声明为static,要不就在chuancai中传入类指针,通过指针访问name,比如

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

}
熙风 2012-03-23
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 wellbeingzhang 的回复:]
public static void chaocai(string x)
{
Console.WriteLine("厨师"+name+"开始炒"+x);
}
静态方法只能调用静态字段,你把字段设置成静态就可以了。这样:
public static string name;
[/Quote]

+1
觉悟之时 2012-03-23
  • 打赏
  • 举报
回复
public static void chaocai(string x)
{
Console.WriteLine("厨师"+name+"开始炒"+x);
}
静态方法只能调用静态字段,你把字段设置成静态就可以了。这样:
public static string name;

111,126

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧