c#中的接口除了用public修饰外,能不能用static修饰? 还有一个问题就是:抽象类里面的方法可以用static修饰??我不太确定:我笔试填的是 不能,可以。请问这样对不对?我知道接口里面的方法是不能用static修饰的。求解释 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 static 静态类方法是在程序加载的时候就在内存中声明完成了,即有实现了接口 :是没有实现的方法,等待具体实现 所以不能用static而抽象类的实现也是在子类中实现的 所以不能 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静态的出现本就是伪面向对象的 是过程化的 但是因为其全部加载 和 使用方便 所以才留在对象型语言里的这点要切记 学这些东西 概念要理清楚点 这种变态的题 及时没有运行过也会很清楚是什么结果 按照你的例子,执行B,但是我把B强制声明为A类型,结果输出i应该是输出0? 貌似你错了哦namespace ConsoleApplication1{ abstract class A { public static int i=0; } class B:A { int i=2; } class progrome{ static void Main(string[] args) { B BB =new B(); Console.WriteLine(A.i); Console.Read(); } } }输出的结果为0. int i=2;这句话 你声明成一个静态属性试一试 编译都不会过好吧 那你说执行 B。i=2;输出A.i 为2我11楼的代码不是按照你9楼的描述写的吗?无论怎么写,输出A.i就是输出0啊 你应该输出B.i 试一下 你的 int i=2; 跟 public static int i=0; 有什么关系么?对象里面的字段和类的静态属性有关系么? 先看看概念理解理解在跑代码尝试下好么? 改为 class B:A { public static int i =2 ; }编译器照常通过 你执行了B。i=2;么 在哪里? B是类 不是对象 看好了昂 奥 可以编译 我在12 楼说错了 B会覆盖A里面的i属性 public abstract class A { public static int i = 0; } public class B : A { public static int i = 0; } sorry,看错了,抽象方法的确不能用static修饰 不能原因:抽象abstract 和 static静态,其实一看他们的作用和属性就很容易辨别,abstract是没有实现的,而static一定要有实现,因为abstract的类不能生产对象,但是static是属于类,而类已经是一个存在的对象,这两个关键字在这上面有一个关键的矛盾点。 DataGridView控件在绑定集合出问题了 AspNetPager的demo,现提供给大家下载 WebService的使用 求文件DotNetSpeech.dll 怎么得到当前时间的毫微秒? C#读大文件问题 图片的问题 关于事件的不解之处 ***急。求取出以file:///开头并以“>结尾的字符串的正表达式 关于Remoting编程的问题,在线等 C# 复制 GIF 图像到剪切板 急!!!请教安装包打包的问题(System.Configuration.Install)
而抽象类的实现也是在子类中实现的 所以不能
public abstract class AA
{
static void AA_Function()
{
Console.WriteLine("keyi");
}
}
从定义上可以看出
abstract 就是为了让其他继承
static 属于类的 不是对象的继承没有意义
abstract关键字和static关键字不能一起使用(在同一个方法或者同一个类上)但是抽象类里可以声明静态方法
类可以被继承 因为可以 多态 (父类 = new 子类) 所以静态方法跟随父类到子类 (这个最好不要叫继承) 因为子类这个静态方法是属于父类的 举例class A
{
public static int i = 0;
}class B:A{}执行 B。i=2;输出A.i 为2静态的出现本就是伪面向对象的 是过程化的 但是因为其全部加载 和 使用方便 所以才留在对象型语言里的
这点要切记
学这些东西 概念要理清楚点 这种变态的题 及时没有运行过也会很清楚是什么结果
namespace ConsoleApplication1
{ abstract class A
{
public static int i=0;
} class B:A
{
int i=2;
}
class progrome{
static void Main(string[] args)
{
B BB =new B();
Console.WriteLine(A.i);
Console.Read();
}
}
}
输出的结果为0.
int i=2;
这句话 你声明成一个静态属性试一试 编译都不会过好吧
我11楼的代码不是按照你9楼的描述写的吗?无论怎么写,输出A.i就是输出0啊
你的 int i=2; 跟 public static int i=0; 有什么关系么?
对象里面的字段和类的静态属性有关系么?
先看看概念理解理解在跑代码尝试下好么?
{
public static int i =2 ;
}编译器照常通过
B是类 不是对象 看好了昂
public abstract class A
{
public static int i = 0;
} public class B : A
{
public static int i = 0;
}
原因:抽象abstract 和 static静态,其实一看他们的作用和属性就很容易辨别,abstract是没有实现的,
而static一定要有实现,因为abstract的类不能生产对象,但是static是属于类,而类已经是一个存在的对象,这两个关键字在这上面有一个关键的矛盾点。