黑马程序员技术交流社区

标题: 动态方法 [打印本页]

作者: 宋超    时间: 2012-3-22 16:19
标题: 动态方法
静态方法跟动态方法有什么不同的地方,麻烦详细解答下最好是举个例子,本人新手
作者: 孙秋生    时间: 2012-3-22 18:07
C#的类中可以包含两种方法:C#静态方法与非静态方法;
      C#静态方法与非静态方法的差异:
           1、 C#静态成员与非静态成员
                  (1)静态成员属于类所有,非静态成员属于类的实例所有;
                  (2)每创建一个类的实例,都会在内存中为非静态成员新分配一块存储;
           2、C#静态方法与非静态方法
                  (1)C#静态方法属于类所有,类实例化前即可使用;
                  (2)非静态方法可以访问类中的任何成员,静态方法只能访问类中的静态成员;
            3、C#静态方法是一种特殊的成员方法 它不属于类的某一个具体的实例,而是属于类本身。所以对静态方法不需要首先创建一个类的实例,而是采用:
                     类名.静态方法
                  (1)static方法是类中的一个成员方法,属于整个类,即不用创建任何对象也可以直接调用! static内部只能出现static变量和其他static方法!而且static方法中还不能使                   用this....等关键字..因为它是属于整个类!
                  (2)静态方法效率上要比实例化高,静态方法的缺点是不自动进行销毁,而实例化的则可以做销毁;
                  (3)静态方法和静态变量创建后始终使用同一块内存,而使用实例的方式会创建多个内存.;
                  (4)C#中的方法有两种:实例方法,静态方法;
作者: →篱誸de~箭    时间: 2012-3-22 18:15
简单点说就是静态方法或属性能被静态方法和属性直接调用,方法不用NEW对象。
非静态方法或属性能被非静态方法或属性直接调用,方法不用NEW对象。
而静态和非静态的属性不能直接调用。
作者: 蔚强    时间: 2012-3-23 00:11
静态变量,静态方法属于类本身,没有实例化对象,类本身就可以直接调用。非静态方法实例化对象才可以调用。另外还应该要注意的是在类中非静态方法可以使用静态变量以及调用静态方法,而静态方法却不能调用非静态方法,以及非静态变量。C#中利用new运算符实例化对象,是在堆中创建的。是运行的时候产生的!!!而静态变量,以及静态方法
是在编译的时候就已经存在了,其实你也可以把静态方法以及变量理解为与生俱来的东西,而把非静态方法,以及非静态当作是后天培养的。
class Person
    {
        private static int age;//静态变量
        private string name;//非静态变量
        public void fun()//非静态方法
        {
            age = 0;//使用静态变量可以,其实调用静态方法也可以
        }
        public static void fun1()//静态方法,它属于类本身
        {
         //   name="dfd";//在静态方法中使用非静态变量会报错。
        }     
    }
static void Main(string[] args)
{
         Person.fun1();//可以但是Person.fun();//就会报错
      Person p=new Person();
         p.fun();//调用非静态方法可以
      p.fun();//我感觉对象也是可以调用静态方法的啊,可是编译会报错,这个我就有点不明白了,在C++中是可以的啊。你要是知道就告诉我哈。。。
}
    希望可以帮到你,你的这个问题又让我回顾了一下C++的内容。刚开始连对象都不会new 你以后要学习C++的时候实例化对象的时候,可不要让C#影响了,C++是这样做的
   Person * p=new Person();




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2