抽象类的非抽象方法是否可不实现?

零壹世界 2008-11-04 03:50:37
在下个载的源码中有这样一个问题:在抽象类中定义了一些抽象方法,和一些非抽象方法,但这些非抽象方法都没有具体的实现!编译时又不出错...谁知道这是什么原因?(我单独写类似的这样一个抽象类出来,又直接报出错了)
例:
public abstract class TestAbstract
{
public TestAbstract();//本应报错
public void Testing(string _testString);//本应报错
public abstract void TestingAbstract(string _testString);
}

谢谢!!!!
...全文
391 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
零壹世界 2008-11-18
  • 打赏
  • 举报
回复
这些我也明白..
不过采用外文件方式来实现方法体,有谁采用过?
应该怎么个实现法呢?
feng4557875 2008-11-17
  • 打赏
  • 举报
回复
抽象类里面可以有非抽象方法,但是如果写有非抽象方法就必须有个方法体,否则会报错的。抽象方法就用子类去实现。
零壹世界 2008-11-17
  • 打赏
  • 举报
回复
楼上,所说的,我也明白..
不过那程序里就是不存在有{}的方法体了...就在13楼所说的情况,我刚开始也想有可能是那问题,不过搜了下,还是没找到....文件是个源码来的...内容太大..下次传.
wangping_li 2008-11-14
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 zhouguoqin 的回复:]
6楼所说的,那非抽象方法,是必须要有方法体的.
这个在我单独调试的时候是有这种提示出来的,报错说必须要有方法体.


但是,我在其它地方也有看到有一个是没有方法体的,却也没有报错.......(何解?????)
是想问问,是不是有存在哪种情况,可以不用方法体?或者可以在其它地方可另外定义?????
[/Quote]
你确定?贴出来看看
gaocumt 2008-11-14
  • 打赏
  • 举报
回复
子类必须实现...除非继续抽象 ,让继承子类的类实现.....
水墨风光 2008-11-14
  • 打赏
  • 举报
回复
源代码里面,跨文件搜索下TestAbstract()

肯定有具体实现!
零壹世界 2008-11-14
  • 打赏
  • 举报
回复
怎么就沉下去了?
没个回应的.
wangping_li 2008-11-14
  • 打赏
  • 举报
回复
抽象类:
1、抽象类本身无法产生实例对象
2、抽象类包含了一个或者以上的抽象方法,这些方法只是提供函数名称,并没有定义如何具体实现
3、抽象类中可以存在非抽象的方法,但是必须要有{}方法体
零壹世界 2008-11-07
  • 打赏
  • 举报
回复
晕呢,咋就没回音了呢..是因为太简单还是因为其它什么原因呢????
那种情况,并不是因为元数据显示的问题,是实实在在的一个抽象类...
单独用时不能通过,在什么时候能够通过,不报错呢???
郁闷中......
零壹世界 2008-11-05
  • 打赏
  • 举报
回复
6楼所说的,那非抽象方法,是必须要有方法体的.
这个在我单独调试的时候是有这种提示出来的,报错说必须要有方法体.


但是,我在其它地方也有看到有一个是没有方法体的,却也没有报错.......(何解?????)
是想问问,是不是有存在哪种情况,可以不用方法体?或者可以在其它地方可另外定义?????
huing 2008-11-04
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 zhoufoxcn 的回复:]
C# codepublic abstract class TestAbstract
{
public TestAbstract();//既然不是abstract的当然要方法体{}了
public void Testing(string _testString);//既然不是abstract的当然要方法体{}了
public abstract void TestingAbstract(string _testString);
}
[/Quote]

这个对头
lovehongyun 2008-11-04
  • 打赏
  • 举报
回复

public abstract class TestAbstract
{
public TestAbstract()
{ }
public void Testing(string _testString)
{ }
public abstract void TestingAbstract(string _testString);
}

public class TestClass : TestAbstract
{
//这里如果不实现TestAbstract中的abstract方法就会报错的
public override void TestingAbstract(string _testString)
{
throw new Exception("The method or operation is not implemented.");
}
}
acqy 2008-11-04
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 zhoufoxcn 的回复:]
C# codepublic abstract class TestAbstract
{
public TestAbstract();//既然不是abstract的当然要方法体{}了
public void Testing(string _testString);//既然不是abstract的当然要方法体{}了
public abstract void TestingAbstract(string _testString);
}
[/Quote]

同意,不是抽象方法应该要定义方法体。哈哈,我忽略了。
周公 2008-11-04
  • 打赏
  • 举报
回复
public abstract class TestAbstract 
{
public TestAbstract();//既然不是abstract的当然要方法体{}了
public void Testing(string _testString);//既然不是abstract的当然要方法体{}了
public abstract void TestingAbstract(string _testString);
}
bhtfg538 2008-11-04
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 acqy 的回复:]
C# code
abstract class CalcAbstract
{
public void Print(int x, int y)
{
Console.WriteLine(this.Calc(x, y));
}
public abstract int Calc(int x, int y);
}

class Add : CalcAbstract
{
public override int Calc(int x, int y)
{
return x + y;
}
}

class Sub : CalcAbstract
{
public override int Calc(int x, int y)
{
return x -…
[/Quote]
Good~
nsource 2008-11-04
  • 打赏
  • 举报
回复
没报错 是因为 抽象类 本身就无法实例化
acqy 2008-11-04
  • 打赏
  • 举报
回复

abstract class CalcAbstract
{
public void Print(int x, int y)
{
Console.WriteLine(this.Calc(x, y));
}
public abstract int Calc(int x, int y);
}

class Add : CalcAbstract
{
public override int Calc(int x, int y)
{
return x + y;
}
}

class Sub : CalcAbstract
{
public override int Calc(int x, int y)
{
return x - y;
}
}

CalcAbstract obj = new Add();
obj.Print(10, 20);


参照上面的代码。那么假设CalcAbstract obj = new Add();是可配置的,那么CalcAbstract就可以根据不同的配置,输出不同的结果。
acqy 2008-11-04
  • 打赏
  • 举报
回复
抽象类里面允许存在非抽象方法,这不是接口。
抽象类的一大特色就是“模板方法模式”,可以在抽象类的非抽象方法中调用本身的抽象方法,而在子类中实现这个抽象方法。
acqy 2008-11-04
  • 打赏
  • 举报
回复
单个TestAbstract当然不会报错,这个类只是在此定义了一个等待实现的方法接口。
但是如果:

public class Impl : TestAbstract
{

}

这样就报错了:你没有实现TestingAbstract方法。

110,556

社区成员

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

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

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