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

非静态的字段、方法或属性“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


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值