我需要两个略有不同的类,它们具有相同的成员,但其中一个类需要用户具有较少的交互可能性。我希望继承第一堂课的第二堂课。
有没有办法从子类中限制对父方法的访问,以便如果有人创建子对象,他们将无法访问某些父类方法(在父类中是公共的)?C#:Child类可以限制对父类方法的访问吗?
回答
你应该有一个抽象基类来共同拥有两个类的东西,然后让另外两个类继承它并添加方法和属性等
abstract class MyBaseClass
{
public int SharedProperty { get; set; }
public void SharedMethod()
{
}
}
class MyClass1 : MyBaseClass
{
public void Method1()
{
}
}
class MyClass2 : MyBaseClass
{
public void Method2()
{
}
}
MyClass1
有:SharedProperty
,SharedMethod
和Method1
。
MyClass2
具有:SharedProperty
,SharedMethod
和Method2
。
不完全,没有。最接近的可能是在基类(父类)中提供虚拟方法,并在派生(子)类中重写/新的方法,并且在适当的情况下不提供行为或例外;
public class Base
{
public virtual void DoSomething()
{ . . . }
}
public class Derived : Base
{
public override void DoSomething()
{
throw new NotSupportedException("Method not valid for Derived");
}
}
编辑为抛出'NotSupportedException'而不是'InvalidOperationException',因为它更标准和逻辑,并且添加了缺少的'Base'继承。 – SimpleVar
没有,这里的原因:
class Animal {
public void Speak() { Console.WriteLine("..."); }
}
class Dog : Animal {
remove void Speak(); // pretend you can do this
}
Animal a = GetAnAnimal(); // who knows what this does
a.Speak(); // It's not known at compile time whether this is a Dog or not
不错的例子,这是完美的,为什么我想要的不可能发生。 – 3Pi
创建的基类,并应该被隐藏受保护的方法。
创建要公开
创建一个子类,从基类继承的声明方法的接口,并明确实现的接口。从接口实现方法调用受保护的方法。
然后子类的用户只能看到接口的成员(这需要他们投的实例作为接口)
- 1. C++中派生类的对象可以被父类访问吗?
- 2. 限制对类的方法的访问
- 3. 为什么这个对象可以访问父类的方法?
- 4. C++:有选择地限制对超类的方法的访问?
- 5. 我可以更改Child类中任何父函数的访问修饰符吗?
- 6. Memberspaces可以访问父类
- 7. TypeScript类可以删除对继承方法的访问吗?
- 8. Scala:我可以访问类型化方法的类型吗?
- 9. 内部类中的方法是否可以访问父类方法?
- 10. 可以通过子类访问父类的属性数据吗?
- 11. 父类包可以从java的子包类中访问吗?
- 12. 子类可以访问父类的私有成员吗?
- 13. 您可以限制自定义字段类型的访问吗?
- 14. Java:从父类访问子类方法
- 15. C++:访问父类
- 16. 如何限制在C#中重写父类方法的子类?
- 17. 从Child类C++调用基类方法
- 18. 为什么父类允许Child类在Child类中将父类的方法设置为抽象类?
- 19. 从C子类中访问父类的方法#
- 20. 限制方法访问C++中的特定类
- 21. 如何从JavaScript中的子类调用父类的方法,以便可以访问父类的局部变量?
- 22. 只需调用方法,我可以从控制器访问Module类方法吗?
- 23. Java:如何限制某个方法对特定类的访问?
- 24. 限制访问类
- 25. 父类可以在Python中访问其他父类的变量吗?
- 26. 在JavaScript类中调用父方法,但可以访问对象实例内的原型方法吗?
- 27. C#如何访问父类的嵌套类低谷对象的方法?
- 28. 我可以通过基类类型的引用访问子类方法吗?
- 29. C++枚举类可以有方法吗?
- 30. 是否可以从Java中的子类访问父类的私有方法?
不是您所想,没有了道路。 – saluce
不,但如果你举一个更具体的例子,你可能会得到一些更好的想法。 –
即使您可以限制子类中可用的成员,用户仍然可以将其作为父级转换并获取父级功能。你最好的选择是遵循RJ Lohan的回答,但是你会遇到可用性问题,因为你的用户需要知道子类中可用的功能。 –