抽象类代码的书写要求

东城居士 2014-07-10 08:53:44
在msdn上查到的描述抽象类:

抽象类具有以下特性:
抽象类不能实例化。
抽象类可以包含抽象方法和抽象访问器。
不能用 sealed(C# 参考)修饰符修改抽象类,这意味着抽象类不能被继承。
从抽象类派生的非抽象类必须包括继承的所有抽象方法和抽象访问器的实实现。
在于tract 修饰符以指示方法或属性不包含实现。
抽象方法具有以下特性:
抽象方法是隐式的虚方法。
只允许在抽象类中使用抽象方法声明。
因为抽象方法声明不提供实际的实现,所以没有方法体;方法声明只是以一个分号结束,并且在签名后没有大括号 ({ })。例如:
public abstract void MyMethod();


这是书上看到的源代码:
public abstract class Animal
{
protected string name;

public string Name
{
get
{
return name;
}
set
{
name = value;
}
}

public Animal()
{
name = "The animal with no name";
}

public Animal(string newName)
{
name = newName;
}

public void Feed()
{
Console.WriteLine("{0} has been fed.", name);
}
}


很疑惑:抽象类的实现里面Feed为什么没有abstract修饰符?上述代码在vs2008可以编译运行。
...全文
500 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
於黾 2014-07-11
  • 打赏
  • 举报
回复
可能是翻译的人中文没学好...
lc_ant 2014-07-11
  • 打赏
  • 举报
回复
引用 8 楼 lyj224170707 的回复:
不能用 sealed(C# 参考)修饰符修改抽象类,这意味着抽象类不能被继承。 这句话没有错。用sealed去修饰抽象类。。那不是在搞笑吗?
可能是我断章取义了,但是我觉得他这句话应该加一句: 不能用 sealed(C# 参考)修饰符修改抽象类,如果用sealed修饰了,这意味着抽象类不能被继承。 这样表达,可能更好点
游离失所 2014-07-11
  • 打赏
  • 举报
回复
不能用 sealed(C# 参考)修饰符修改抽象类,这意味着抽象类不能被继承。 这句话没有错。用sealed去修饰抽象类。。那不是在搞笑吗?
於黾 2014-07-11
  • 打赏
  • 举报
回复
应该是说一个抽象类不能继承一个非抽象类?
於黾 2014-07-11
  • 打赏
  • 举报
回复
引用 5 楼 lc_antt 的回复:
不能用 sealed(C# 参考)修饰符修改抽象类,这意味着抽象类不能被继承。 抽象类不能被继承。。。毁人不倦
+1 "从抽象类派生的非抽象类" 不能继承,怎么派生?
lc_ant 2014-07-11
  • 打赏
  • 举报
回复
不能用 sealed(C# 参考)修饰符修改抽象类,这意味着抽象类不能被继承。 抽象类不能被继承。。。毁人不倦
快乐起航2020 2014-07-11
  • 打赏
  • 举报
回复
跟楼主共同学习一下
thinkingforever 2014-07-11
  • 打赏
  • 举报
回复
楼主好学生,楼上解释很好!
BrightFireOfCy 2014-07-11
  • 打赏
  • 举报
回复
引用 楼主 lorgenlorgen 的回复:
很疑惑:抽象类的实现里面Feed为什么没有abstract修饰符?上述代码在vs2008可以编译运行。
Feed不是抽象方法 lz的代码里面没有一个是抽象方法,所以你的这个抽象类如果被继承,子类不用实现任何父类方法。 最常见的抽象类大概是模板方法之类模式,比如:

public abstract class 房子
{
    public void 造() {
    	竖柱子();
        上大梁();
        上附梁();
        竖墙();
        盖瓦();
        内装();
    }
    public abstract void 竖柱子();
    public abstract void 上大梁();
    public abstract void 上附梁();
    public abstract void 竖墙();
    public abstract void 盖瓦();
    public abstract void 内装();
}
BrightFireOfCy 2014-07-11
  • 打赏
  • 举报
回复
引用 5 楼 lc_antt 的回复:
不能用 sealed(C# 参考)修饰符修改抽象类,这意味着抽象类不能被继承。 抽象类不能被继承。。。毁人不倦
你理解错了, 原文的意思是 如果抽象类能加sealed修饰符,那么抽象类就不能被继承,所以不能用 sealed(C# 参考)修饰符修饰抽象类
threenewbee 2014-07-10
  • 打赏
  • 举报
回复
要是抽象类只能包括抽象方法,那么抽象类和接口就没有什么区别了。 抽象类不同于接口就是因为抽象类可以包含非抽象的方法。
tanta 2014-07-10
  • 打赏
  • 举报
回复
这不是一个抽象方法。 抽象方法具有以下特性: 抽象方法是隐式的虚方法。 只允许在抽象类中使用抽象方法声明。 因为抽象方法声明不提供实际的实现,所以没有方法体;方法声明只是以一个分号结束,并且在签名后没有大括号 ({ })。例如: public abstract void MyMethod();

111,125

社区成员

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

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

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