日期:2014-05-18  浏览次数:20909 次

c#中的接口除了用public修饰外,能不能用static修饰?
还有一个问题就是:抽象类里面的方法可以用static修饰??


我不太确定:我笔试填的是 不能,可以。请问这样对不对?我知道接口里面的方法是不能用static修饰的。求解释

------解决方案--------------------
static 静态类方法是在程序加载的时候就在内存中声明完成了,即有实现了

接口 :是没有实现的方法,等待具体实现 所以不能用static
而抽象类的实现也是在子类中实现的 所以不能
------解决方案--------------------
不可以。你可以理解为静态方法并不属于类,只是类命名空间下的全局方法。
------解决方案--------------------
探讨

还有一个问题就是:抽象类里面的方法可以用static修饰??


------解决方案--------------------
抽象类和普通类的唯一区别就是不能实例化,其他的完全一样
------解决方案--------------------
C# code

    public abstract class AA
    {
        static void AA_Function()
        {
            Console.WriteLine("keyi");
        }
    }

------解决方案--------------------
探讨
不可以。你可以理解为静态方法并不属于类,只是类命名空间下的全局方法。

------解决方案--------------------
接口不可以,抽象类可以。
------解决方案--------------------
记好了 抽象类里面的抽象方法不能static 其他都可以
从定义上可以看出 
abstract 就是为了让其他继承 
static 属于类的 不是对象的继承没有意义 
abstract关键字和static关键字不能一起使用(在同一个方法或者同一个类上)

但是抽象类里可以声明静态方法 
类可以被继承 因为可以 多态 (父类 = new 子类) 所以静态方法跟随父类到子类 (这个最好不要叫继承) 因为子类这个静态方法是属于父类的 举例

class A 
{
public static int i = 0;
}

class B:A{

}

执行 B。i=2;

输出A.i 为2

静态的出现本就是伪面向对象的 是过程化的 但是因为其全部加载 和 使用方便 所以才留在对象型语言里的
这点要切记 
学这些东西 概念要理清楚点 这种变态的题 及时没有运行过也会很清楚是什么结果
------解决方案--------------------
探讨

引用:

记好了 抽象类里面的抽象方法不能static 其他都可以
从定义上可以看出
abstract 就是为了让其他继承
static 属于类的 不是对象的继承没有意义
abstract关键字和static关键字不能一起使用(在同一个方法或者同一个类上)

但是抽象类里可以声明静态方法
类可以被继承 因为可以 多态 (父类 = ……

------解决方案--------------------
你应该输出B.i 试一下 
你的 int i=2; 跟 public static int i=0; 有什么关系么?
对象里面的字段和类的静态属性有关系么? 


先看看概念理解理解在跑代码尝试下好么?
------解决方案--------------------
奥 可以编译 我在12 楼说错了 B会覆盖A里面的i属性
------解决方案--------------------
不能
原因:抽象abstract 和 static静态,其实一看他们的作用和属性就很容易辨别,abstract是没有实现的,
而static一定要有实现,因为abstract的类不能生产对象,但是static是属于类,而类已经是一个存在的对象,这两个关键字在这上面有一个关键的矛盾点。