C# 静态方法调用非静态方法

转载:http://blog.csdn.net/seattle1215/article/details/6657814

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. namespace Cash
  6. {
  7. class Program
  8. {
  9. static void Main(string[] args)
  10. {
  11. (new Program()).run();
  12. // writeFee(calculate(dailyRate, workDay));
  13. // 对于非 static 方法,若想像上面这样直接调用则会报以下错
  14. // Error    1 An object reference is required
  15. // for the non-static field, method, or
  16. // property ‘Cash.Program.readDouble(string)‘
  17. printfOtherthing("static method is called.");        // static 方法可直接调用
  18. Program program = new Program();        // 非 static 方法需要先创建一个对象
  19. // 然后用对象调用
  20. program.printSomething("non-static menthod is called.");
  21. }
  22. public void run()
  23. {
  24. double dailyRate = readDouble("please enter your rate: ");
  25. int workDay = readInt("please enter your days of working: ");
  26. writeFee(calculate(dailyRate, workDay));
  27. }
  28. private void writeFee(double p)
  29. {
  30. Console.WriteLine("The consultant‘s fee is: {0}", p * 1.6);
  31. }
  32. private double calculate(double dailyRate, int workDay)
  33. {
  34. return dailyRate * workDay;
  35. }
  36. private int readInt(string p)
  37. {
  38. Console.WriteLine(p);
  39. string a = Console.ReadLine();          // 读取输入的字符(readline读取的
  40. // 字符都是 string 类型)
  41. return int.Parse(a);                    // 把 a 转换为 int 类型,并返回
  42. }
  43. private double readDouble(string p)
  44. {
  45. Console.WriteLine(p);
  46. string line = Console.ReadLine();
  47. return double.Parse(line);
  48. }
  49. private void printSomething(string a)       // non-static method
  50. {
  51. Console.WriteLine(a);
  52. }
  53. private static void printfOtherthing(string a)          // static method
  54. {
  55. Console.WriteLine(a);
  56. }
  57. }
  58. }
时间: 2024-10-13 22:18:53

C# 静态方法调用非静态方法的相关文章

PHP 类中静态方法调用非静态方法

静态方法调用非静态方法: 在类中静态方法中,需要实例化对象,然后再调用类中的方法 非静态方法调用静态方法: 可以self 或者 类名加::的形式调用 如下面的案例: <?php class A{ public function noneStaticFun(){ echo __CLASS__." none static function<br/>"; } public static function staticFun(){ echo __CLASS__."

静态方法调用非静态方法——编译出现错误

出现:No enclosing instance of type Test_Static is accessible. Must qualify the allocation with an enclosing instance of type Test_Static (e.g. x.new A() where x is an instance of Test_Static). 上面的编译错误:可能由于静态public static main调用类的非静态方法AA 有两种解决办法: 第一种: 将

java静态方法调用非静态方法

我们都知道,静态static方法中不能调用非静态non-static方法,准确地说是不能直接调用non-static方法.但是可以通过将一个对象的引用传入static方法中,再去调用该对象的non-static方法. 其实这个事实的应用很经常,以至于我们不去重视:在主函数(static方法)中我们经常创建某个类的实例,再利用其饮用变量调用它的非静态方法. //StaticMethodTest.java //A ststic method cannot call a non-static meth

静态方法和非静态方法的区别

首先,两者本质上的区别是:静态方法是在类中使用staitc修饰的方法,在类定义的时候已经被装载和分配.而非静态方法是不加static关键字的方法,在类定义时没有占用内存,只有在类被实例化成对象时,对象调用该方法才被分配内存. 其次,静态方法中只能调用静态成员或者方法,不能调用非静态方法或者非静态成员,而非静态方法既可以调用静态成员或者方法又可以调用其他的非静态成员或者方法. 例子1:静态方法的Main方法访问类中的非静态成员方法. class Test{ public int sum(int a

PHP中静态(static)调用非静态方法详解

1.PHP中可以静态调用非静态方法么? 今天我被问到PHP中可不可以使用 className::methodName() 的方法来调用一个没有声明static的方法.在我的印象中,我好像是见过这种用法,但又有些不确定.大家都知道,在手册或者教程里,方法被分为静态方法 和非静态方法,通常我们静态调用的方法,肯定是静态方法. 那如果我们调用了非静态方法会怎么样呢?首先做测试. <?php class test{ function test() { echo 'it works'; } } test:

PHP可以通过类名调用非静态方法

今日有兄弟遇上一个问题,就是可以通过class名称直接调用该类中的函数,我测试了一下,确实可以,概念中是只有静态方法才可以这样调用的,现在 被刷新了,于是我在方法中加入一行$this相关的操作,再运行,立马报错了,也就是PHP在调用方法时,没有严格限制,但是在方法内部执行时,遇 上$this这个变量时抛出: Using $this when not in object context 也就是如果你的方法内没有涉及到实例化的本类引用,就可以直接调用了 以下是测试代码: t::t1(); class

java中静态方法中为什么不能使用this、super和直接调用非静态方法

这个要从java的内存机制去分析,首先当你New 一个对象的时候,并不是先在堆中为对象开辟内存空间,而是先将类中的静态方法(带有static修饰的静态函数)的代码加载到一个叫做方法区的地方,然后再在堆内存中创建对象.所以说静态方法会随着类的加载而被加载.当你new一个对象时,该对象存在于对内存中,this关键字一般指该对象,但是如果没有new对象,而是通过类名调用该类的静态方法也可以. 程序最终都是在内存中执行,变量只有在内存中占有一席之地时才会被访问,类的静态成员(静态变量和静态方法)属于类本

C#静态方法与非静态方法比较

c#静态方法与非静态方法比较: 一.静态方法:使用static修改的方法就是静态方法,否则就是非静态方法. 二.差异比较: 第一:C#静态成员:(1)静态成员属于类所有,非静态成员属于类的实例所有. (2)每创建一个类的实例,都会在内存中为非静态成员新分配一块存储. 总结:静态成员属于类所有,为各个类的实例所公用,无论类创建了多少实例,类的静态成员在内存中只占同一块区域.   第二:C#静态方法:     (1)C#静态方法属于类所有,类实例化前即可使用. (2)非静态方法可以访问类中的任何成员

c#静态方法和非静态方法详细介绍

C#的类中可以包含两种方法:静态方法和非静态方法. 使用了static 修饰符的方法为静态方法,反之则是非静态方法. 静态方法是一种 特殊的成员方法,它不属于类的某一个具体的实例,而是属于类本身. 所以对静态方法不需要 首先创建一个类的实例,而是采用类名.静态方法的格式 . 1.static方法是类中的一个成员方法,属于整个类,即不用创建任何对象也可以直接调用! static内部只能出现static变量和其他static方法!而且static方法中还不能使用this....等关键字..因为它是