Tag: 访问修饰符

为什么我们不能在C#中重写方法时更改访问修饰符?

在C#中,我们不能改变访问修饰符,而从基类重写一个方法。 例如 Class Base { **protected** string foo() { return "Base"; } } Class Derived : Base { **public** override string foo() { return "Derived"; } } 这在C#中是无效的,它会给编译时间带来错误。 我想知道原因,为什么不允许。 有没有技术上的问题,或者是否会导致在访问限制方面不一致?

类variables:公共访问只读,但私有访问读/写

哎呀,暂时不在这个套接字库上工作。 我正在尝试用C ++来教育自己。 有了类,有没有办法让variables只读给公众,但是在私人访问时读取+写入? 比如这样的东西: class myClass { private: int x; // this could be any type, hypothetically public: void f() { x = 10; // this is OK } } int main() { myClass temp; // I want this, but with private: it's not allowed cout << temp.x << endl; // this is what […]

当有人重写抽象方法时,我能强制保护抽象方法吗?

在我的抽象类中,我有这样的东西: public Object methodIWantToExpose(){ // … methodIDontWantExposed() // … } protected abstract void methodIDontWantExposed(); 事情是,我想强制扩展methodIDontWantExposed()的人来保护它,因为我不希望扩展类同时暴露了methodIDontWantExposed和methodIWantToExpose。 有没有办法做到这一点(或不同的方法,可以避免我的问题)?

内部抽象类:如何隐藏程序集外的用法?

我有一个常见的程序集/项目有一个抽象的基类,然后我想公开其他程序集的几个派生类。 我不想让抽象基类在Intellisense中的其他程序集中出现,所以我想我会把它放在internal ,但是我得到这个错误: 不一致的可访问性:基类“设置”比类“IrcSettings”更难以访问…. 我真的不明白这一点。 我不得不使抽象的Settings类public ,因此在这个程序集之外是可见的。 我怎样才能让这个classinternal呢?

未指定时暗示哪些访问修饰符?

对于支持访问修饰符的所有不同概念,如字段,属性,方法和类,如果没有指定,哪些访问修饰符是隐含的?

build设者总是要公开吗?

我的第一个问题是 – class Explain() { public Explain() { } } 应该构造函数总是宣布为公共? 如果我创build一个private构造函数呢? 我总是看到build设者是隐含public 。 那么为什么private构造函数是有用的? 或者根本没有用处 因为没有人能够调用它,或者从来没有一个对象(因为private构造函数)! 这是我的第二个问题。

私人小组,function和class级之间的区别

以下几点有什么区别: 私人小组 私人function 私人class 什么时候应该使用每一个?

内部class级的公共和内部成员?

好吧,这可能有点愚蠢的问题,当然有明显的答案,但我很好奇,如果我错过了这里的任何微妙之处。 在internal阶层申报的public成员与internal阶层申报的internal成员之间的可见性/可用性方面是否有区别? 即之间 internal class Foo { public void Bar() { } } 和 internal class Foo { internal void Bar() { } } 如果你将这个方法声明为public并且是virtual ,然后在一个派生类中public ,那么使用这个修饰符的理由是很清楚的。 但是,这是唯一的情况…我错过了别的吗?

为什么我不能拥有受保护的接口成员?

在接口上声明受保护访问成员的参数是什么? 例如,这是无效的: public interface IOrange { public OrangePeel Peel { get; } protected OrangePips Seeds { get; } } 在这个例子中, IOrange接口将保证实现者至less向其inheritance者提供一个OrangePips实例。 如果实施者想要的话,他们可以将范围扩大到public : public class NavelOrange : IOrange { public OrangePeel Peel { get { return new OrangePeel(); } } protected OrangePips Seeds { get { return null; } } } public class ValenciaOrange : […]

是不是“包私人”成员访问与默认(无修饰)访问的代名词?

我对一些文档使用的“package private”一词有点困惑,以及“default access”的使用。 不是包私有和默认访问两个同义的保护?