C# 抽象类中受保护的抽象或公共抽象方法
嗨,我有一个抽象类,其中有一些公共方法和一些抽象方法。 我使用了public,以便它们实现派生类的通用方法 让我困惑的是,为什么我要定义一个公共抽象方法而不是受保护的抽象方法。在抽象类中定义公共抽象方法对我来说毫无意义。。。。因为if是一个抽象将在派生类中被重写,但if定义为public也是一样的,但不知何故,将其定义为protected更有意义,因为我们知道,我们将在派生类中重写它C# 抽象类中受保护的抽象或公共抽象方法,c#,oop,abstract,protected,C#,Oop,Abstract,Protected,嗨,我有一个抽象类,其中有一些公共方法和一些抽象方法。 我使用了public,以便它们实现派生类的通用方法 让我困惑的是,为什么我要定义一个公共抽象方法而不是受保护的抽象方法。在抽象类中定义公共抽象方法对我来说毫无意义。。。。因为if是一个抽象将在派生类中被重写,但if定义为public也是一样的,但不知何故,将其定义为protected更有意义,因为我们知道,我们将在派生类中重写它 在抽象类中将方法定义为公共抽象是错误的吗?哪个更好?为什么?出于同样的原因,您希望在对象中使用公共方法:) 您只
在抽象类中将方法定义为公共抽象是错误的吗?哪个更好?为什么?出于同样的原因,您希望在对象中使用公共方法:) 您只是不知道在这个阶段的具体实现。 它在抽象级别非常高的类中很常见,例如中间件 编辑:100%合法。您只需要确保在每个具体实现中,您都希望向世界其他地方公开这些功能。入口点方法(例如:start、execute、parse..)通常是这类方法
抽象类本身必须与继承自抽象类的类一样可访问。因此,如果继承的类是公共的,那么抽象类也必须是公共的 公共抽象与其他公共方法具有相同的思想:如果您有一个抽象类,那么您将通过此函数。所以,如果这个方法应该从外部调用,它是公共的。如果这种方法只是为了孩子和父母之间的交流,那么保护就是最好的方法。简单示例,请参见作为抽象类用户的Main方法:
static void Main(string[] args)
{
Animal cat = new Cat();
Animal dog = new Dog();
cat.Eat();
dog.Eat();
cat.Move();
dog.Move();
}
public abstract class Animal
{
public abstract void Eat();
protected abstract void ComplexMoving();
public void Move()
{
ComplexMoving();
}
}
public class Dog : Animal
{
public override void Eat()
{
Debug.WriteLine("Dog says Namnam");
}
protected override void ComplexMoving()
{
Debug.WriteLine("Dog no stupid");
}
}
public class Cat: Animal
{
public override void Eat()
{
Debug.WriteLine("Cat says namnam");
}
protected override void ComplexMoving()
{
Debug.WriteLine("Cat does a slalom");
}
}
这取决于你想要实现什么。例如,您有一个
TV
类,该类有3个方法,打开
,关闭
,和绘制
您只希望客户端打开
或关闭
电视,但只有其子类应该知道在屏幕上绘制什么以及如何绘制。因此,电视
的外观大致如下
public abstract class Television
{
public abstract void TurnOn();
public abstract void TurnOff();
protected abstract void Draw();
}
然后每个公司都有自己的实现
public sealed class MyTelevision
: Television
{
public override void TurnOn()
{
Console.WriteLine("Turn on my tv");
}
public override void TurnOff()
{
Console.WriteLine("Turn off my tv");
}
protected override void Draw()
{
// code here.
}
}
客户端可以打开
或关闭
电视,但不能在屏幕上绘制任何内容