c#中的接口除了用public修饰外,能不能用static修饰?

昵称是可以中文吗 2012-03-19 02:06:39
还有一个问题就是:抽象类里面的方法可以用static修饰??


我不太确定:我笔试填的是 不能,可以。请问这样对不对?我知道接口里面的方法是不能用static修饰的。求解释
...全文
474 24 打赏 收藏 转发到动态 举报
写回复
用AI写文章
24 条回复
切换为时间正序
请发表友善的回复…
发表回复
mathieuxiao 2012-03-20
  • 打赏
  • 举报
回复
[Quote=引用 20 楼 shaofei830927 的回复:]

你写一个可以的我看看
[/Quote]
sorry,看错了,抽象方法的确不能用static修饰
zy5251zd_net 2012-03-20
  • 打赏
  • 举报
回复
不能
原因:抽象abstract 和 static静态,其实一看他们的作用和属性就很容易辨别,abstract是没有实现的,
而static一定要有实现,因为abstract的类不能生产对象,但是static是属于类,而类已经是一个存在的对象,这两个关键字在这上面有一个关键的矛盾点。
rcsglydm 2012-03-20
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 caozhy 的回复:]
不可以。你可以理解为静态方法并不属于类,只是类命名空间下的全局方法。
[/Quote]

这话说得准确。静态方法只是一个全局方法,不可以看成类。
shaofei830927 2012-03-19
  • 打赏
  • 举报
回复
你写一个可以的我看看
mathieuxiao 2012-03-19
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 shaofei830927 的回复:]

记好了 抽象类里面的抽象方法不能static 其他都可以
[/Quote]

胡说八道!!!
shaofei830927 2012-03-19
  • 打赏
  • 举报
回复

public abstract class A
{
public static int i = 0;
}

public class B : A
{
public static int i = 0;
}
shaofei830927 2012-03-19
  • 打赏
  • 举报
回复
奥 可以编译 我在12 楼说错了 B会覆盖A里面的i属性
shaofei830927 2012-03-19
  • 打赏
  • 举报
回复
你执行了B。i=2;么 在哪里?
B是类 不是对象 看好了昂
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 shaofei830927 的回复:]

引用 10 楼 scauscnu 的回复:

引用 9 楼 shaofei830927 的回复:

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

但是抽象类里可以声明静态……
[/Quote]
改为 class B:A
{
public static int i =2 ;


}编译器照常通过
shaofei830927 2012-03-19
  • 打赏
  • 举报
回复
你应该输出B.i 试一下
你的 int i=2; 跟 public static int i=0; 有什么关系么?
对象里面的字段和类的静态属性有关系么?


先看看概念理解理解在跑代码尝试下好么?
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 shaofei830927 的回复:]

引用 10 楼 scauscnu 的回复:

引用 9 楼 shaofei830927 的回复:

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

但是抽象类里可以声明静态……
[/Quote]
那你说执行 B。i=2;

输出A.i 为2
我11楼的代码不是按照你9楼的描述写的吗?无论怎么写,输出A.i就是输出0啊
shaofei830927 2012-03-19
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 scauscnu 的回复:]

引用 9 楼 shaofei830927 的回复:

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

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

int i=2;
这句话 你声明成一个静态属性试一试 编译都不会过好吧
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 shaofei830927 的回复:]

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

但是抽象类里可以声明静态方法
类可以被继承 因为可以 多态 (父类 = new 子类) 所以静态方法跟随父类到子类 (……
[/Quote]
貌似你错了哦
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.。。。
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 shaofei830927 的回复:]

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

但是抽象类里可以声明静态方法
类可以被继承 因为可以 多态 (父类 = new 子类) 所以静态方法跟随父类到子类 (……
[/Quote]
按照你的例子,执行B,但是我把B强制声明为A类型,结果输出i应该是输出0?
shaofei830927 2012-03-19
  • 打赏
  • 举报
回复
记好了 抽象类里面的抽象方法不能static 其他都可以
从定义上可以看出
abstract 就是为了让其他继承
static 属于类的 不是对象的继承没有意义
abstract关键字和static关键字不能一起使用(在同一个方法或者同一个类上)

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

class A
{
public static int i = 0;
}

class B:A{

}

执行 B。i=2;

输出A.i 为2

静态的出现本就是伪面向对象的 是过程化的 但是因为其全部加载 和 使用方便 所以才留在对象型语言里的
这点要切记
学这些东西 概念要理清楚点 这种变态的题 及时没有运行过也会很清楚是什么结果
baichangle 2012-03-19
  • 打赏
  • 举报
回复
接口不可以,抽象类可以。
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 karascanvas 的回复:]

引用楼主 scauscnu 的回复:

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



绝对可以,但跟你标题说的不一样。
[/Quote]
恩,我问了两个问题,谢谢大家
threenewbee 2012-03-19
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 caozhy 的回复:]
不可以。你可以理解为静态方法并不属于类,只是类命名空间下的全局方法。
[/Quote]
晕,标题和正文说的不一样。

前者不可以,后者(抽象类)可以。
mathieuxiao 2012-03-19
  • 打赏
  • 举报
回复

public abstract class AA
{
static void AA_Function()
{
Console.WriteLine("keyi");
}
}
mathieuxiao 2012-03-19
  • 打赏
  • 举报
回复
抽象类和普通类的唯一区别就是不能实例化,其他的完全一样
加载更多回复(3)

111,126

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧