在ASP.NET(C#)的项目开发中什么时候使用static!什么时候不使用这个关键字!
比如一个判断是否为空的函数
//方法一:带有static的函数
public static bool ISNull(string aaa)
{
    if(aaa=="")
    {
        return false;
    }
    else
    {
        return true;
    }
}
//方法一:不带static的函数
public bool ISNull(string aaa)
{
    if(aaa=="")
    {
        return false;
    }
    else
    {
        return true;
    }
}
上面只是写了两个基本的方法!请问像这样的什么时候用方法一,什么时候该用方法二呢?设计原理是什么?

解决方案 »

  1.   

    http://news.newhua.com/news1/program_language/2008/414/0841411210752F776KH77099A7365EF5DK21I947811EG00E7B2FDK1.html参考一下
      

  2.   

    第二种是纯粹面向对象的,方法定义在对象上,因此你可以在方法设计中使用this来访问此对象自身独立的属性以及关联对象。当你的设计是OO多态的,例如你在定义一个应用api时使用接口或者高层类型来定义一个业务处理方法,那么你可以使用此接口或者类型的最终的具体实现类型来访问此方法,此时你只能使用面向对象的方法定义才能调用这个参数上的方法。第一种,方法定义在类型上,这其实就是普通结构化函数。既然方法并不封装在对象上,那么当然此风格就跟面向对象设计没有什么关系,顶多算是面向类型的,而不是面向对象的。
      

  3.   

    那么你可以使用此接口或者类型的最终的具体实现类型来访问此方法  -->  那么你可以使用此接口或者类型的最终的具体实现类型的对象实例来访问此方法例如一个应用api接口中的方法定义为:public Interface I飞机
    {
        public void 飞往(I目的地 x);
    }你实现一个飞机的“飞往”方法的时候,内部可能需要使用到本飞机的以及目的地的属性和方法,目的地的方法就是面向对象的,是通过最终的具体实现了“I目的地”的类型的对象实例来调用的面向对象的方法(也就是说设计时这个参数类型并不确定,而是可以使用任何接口实现或者类型子类来实现),而不是直接调用面向某个类型的方法。
      

  4.   

    例如程序using System;
    class SingletonDemo
    {    
        private static SingletonDemo theSingleton = null;    private SingletonDemo() {}    public static SingletonDemo Instance() 
        {    
            if (null == theSingleton) 
            {
                theSingleton = new SingletonDemo();
            }
            return theSingleton;
        }
    }
    调用时使用
    void Test()
    {
      SingletonDemo s1 = SingletonDemo.Instance();
      .......
    }这是面向类型的,而不是面向对象的。当我们以接口(或者类型)来设计软件时,应该是先实现其接口规格,然后才重构其内部实现,所以会写为
    void Test(MyApplication app)
    {
      SingletonDemo s1 = app.Instance();
      .......
    }这才是面向对象的写法。
      

  5.   

    别大篇大篇理论啦。
    实用点:工具类中的方法可以考虑static,读取配置文件信息可以考虑static,常量static final,
      

  6.   

     其实 静态方法类似于vb或者js里的全局函数,因为c#是面向对象,所有方法都必须放在类下。
    再具体一点,如果这个方法涉及的对象跟具体实例无关,都可以标为静态。
    比如说 
    class  a
    {
      classb b = new classb();
      void methoed1()  //这里 这个方法就不能为static 
      {
         b.xxx = "xxxxxx";
       }
       
    }
      

  7.   

    static关键字修饰的方法直接使用类名访问,如果你觉得太多的地方需要产生对象的话,就使用static咯,对于小程序,这些都无所谓
      

  8.   

    感觉static有点像全局变量,一般就像全局这么用