非静态的字段、方法或属性……要求对象引用【學習】要求對象引用?

来源:互联网 发布:古墓丽影崛起数据损毁 编辑:程序博客网 时间:2024/05/18 02:26
非静态的字段、方法或属性“TestDelegate.SayGoodBye(string)”要求对象引用【學習】要求對象引用?  发帖心情 Post By:2006-8-4 17:47:26

 首先看一段代碼:

using System;
public class TestDelegate
{
 delegate void DG(string str);
 public void Speaking(string strContent)
 {
  Console.WriteLine(strContent);
 }
 public void SayGoodBye(string strName)
 {
  Console.WriteLine("Goodbye,"+strName);
 }
 public void SayWelCome(string strName)
 {
  Console.WriteLine("Welcome,"+strName);
 }
 static void Main(string[] args)
 {
  DG a=new DG(SayWelCome);
  DG b=new DG(Speaking);
  DG c=new DG(SayGoodBye);
  Person ps=new Person("隴上煙雨劍");
  a(ps.Name);
  b("您好!");
  c(ps.Name);
 }

};

public class Person
{
 public string strName=null;
 public Person()
 {
  this.Name="";
 }
 public Person(string stringName)
 {
  this.Name=stringName;
 }
 public string Name//實例化以後就具有的屬性
 {
  get
  {
   return strName;
  }
  set
  {
   strName=value;
  }
 }
};

在編譯的工程中會報這樣的錯誤:

TD.cs(19,15): error CS0120:
        非静态的字段、方法或属性“TestDelegate.SayWelCome(string)”要求对象引用
TD.cs(20,15): error CS0120:
        非静态的字段、方法或属性“TestDelegate.Speaking(string)”要求对象引用
TD.cs(21,15): error CS0120:
        非静态的字段、方法或属性“TestDelegate.SayGoodBye(string)”要求对象引用

     這是為什麽呢?

    我們知道,類裏面的方法有兩种表現:一種是直接可以來用的,還有一種是必須實例化以後才能使用的。前者要求在方法聲明的時候必須加上static關鍵字(是不是想起Main方法了???),因爲這個方法不能被實例化!後者就不能加static了,這種方法不能像前面的一樣通過類名.方法名來調用,必須通過實例名.方法名來調用(實例化的過程就是創建一個對象嘛--這是廢話)。

    清楚了這一點,改起來就容易了!

下面給出正確的代碼:

using System;
public class TestDelegate
{
 delegate void DG(string str);
 public void Speaking(string strContent)
 {
  Console.WriteLine(strContent);
 }
 public void SayGoodBye(string strName)
 {
  Console.WriteLine("Goodbye,"+strName);
 }
 public void SayWelCome(string strName)
 {
  Console.WriteLine("Welcome,"+strName);
 }
 static void Main(string[] args)
 {
  TestDelegate td=new TestDelegate();
  DG a=new DG(td.SayWelCome);
  DG b=new DG(td.Speaking);
  DG c=new DG(td.SayGoodBye);
  Person ps=new Person("隴上煙雨劍");
  a(ps.Name);
  b("您好!");
  c(ps.Name);
 }

};

public class Person
{
 public string strName=null;
 public Person()
 {
  this.Name="";
 }
 public Person(string stringName)
 {
  this.Name=stringName;
 }
 public string Name//實例化以後就具有的屬性
 {
  get
  {
   return strName;
  }
  set
  {
   strName=value;
  }
 }
};

運行結果:

Welcome,隴上煙雨劍
您好!
Goodbye,隴上煙雨劍

http://yanyuge.blog.sohu.com/2184139.html


原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 华为p10开不了机怎么办 眼镜腿夹的头疼怎么办 摩托车车头锁坏了怎么办 夏天骑摩托车戴头盔热怎么办 头盔玻璃罩边固定老是掉怎么办 电动车不戴头盔被扣车怎么办 郴州骑电动车没戴头盔怎么办 配置数据源时发现两个版本怎么办 微信占用内存3g怎么办 打印机显示内存已满怎么办 网页显示代理服务器连接失败怎么办 墙内线路断了怎么办 墙里的电线坏了怎么办 鱼竿最前端断了怎么办 下雨天墙壁与管道间漏水怎么办 电饭锅的电线被雨淋了怎么办 钢琴跨八度手短怎么办 弹钢琴手指不灵活怎么办呢? 理发剪不锋利了怎么办 室外宽带线断了怎么办 接宽带光纤太短怎么办 装修光纤网线太短怎么办 宽带入户线断了怎么办 电信有无线没网怎么办 墙里的网线断了怎么办 墙里网线断了怎么办 3根网线断了怎么办 剪了层次的头发怎么办 小米6充电线坏了怎么办 小米6导航信号弱怎么办 麦多多充不了电怎么办 一加数据线坏了怎么办 小米耳机泡水了怎么办 公司拖欠工资公司破产了怎么办 苹果x外壳掉漆怎么办 手机壳按键很硬怎么办 棉质白衣服染色怎么办 白棉t恤混洗染色怎么办 包包被衣服染色了怎么办 白色衣服染了菜汁怎么办 一加3t屏幕刺眼怎么办