当前位置:编程学习 > C#/ASP.NET >>

protected internal怎么无效吗?

我想要实现:基类的部分属性只能在本程序集的子类才能看到,即某些属性非本程序集无法看到、非子类无法看到

我是下面这样写的其中Prop1属性就是我想要控制的,即想要类A可以访问,类B、C不能访问,但按下面的写法写,结果类B、类C仍然能访问Prop1(感觉和public一样了,汗),而类B不能访问Prop2、类C不能访问Prop3(这两个正常)

请问这是什么原因???
程序集1
public class BaseClass
{
    protected internal string Prop1 { get; set;}
    protected string Prop2 { get; set;}
    internal string Prop3 { get; set;}
    public string Prop4 { get; set;}
}
public class A :  BaseClass
{
    ……
}
public class B
{
    ……
}
程序集2
public class C :  BaseClass
{
    ……
}


--------------------编程问答-------------------- protected internal是两个单词权限的并集,不是交集。即本程序集内或派生类都可以访问。 --------------------编程问答-------------------- 除 --------------------编程问答-------------------- protected internal
The type or member can be accessed by any code in the assembly in which it is declared, or from within a derived class in another assembly. Access from another assembly must take place within a class declaration that derives from the class in which the protected internal element is declared, and it must take place through an instance of the derived class type.

来自msdn:
Access Modifiers (C# Programming Guide)
http://msdn.microsoft.com/en-us/library/ms173121.aspx --------------------编程问答-------------------- 试一试用Internal 修饰BaseClass,成员用protect. --------------------编程问答--------------------
引用 1 楼 dalmeeme 的回复:
protected internal是两个单词权限的并集,不是交集。即本程序集内或派生类都可以访问。


那我想要交集的效果怎么办,就是某些属性不想被其他类库访问,并且只能子类里访问 --------------------编程问答--------------------
引用 4 楼 findcaiyzh 的回复:
试一试用Internal 修饰BaseClass,成员用protect.


如果用Internal基类修饰那其他程序集都不能访问这个类了 --------------------编程问答--------------------
引用 6 楼 niuniuhuang 的回复:
引用 4 楼 findcaiyzh 的回复:试一试用Internal 修饰BaseClass,成员用protect.

如果用Internal基类修饰那其他程序集都不能访问这个类了


那估计没啥办法了。
有个笨方法,就是加入一个基类继承自BaseClass,修饰为Internal,把外面不让访问的成员放到新类中。 --------------------编程问答-------------------- 基本上看了LZ的问题,有点震惊 --------------------编程问答-------------------- 明显不是一个类的范畴了,拆成两个 --------------------编程问答--------------------
引用 7 楼 findcaiyzh 的回复:
那估计没啥办法了。
有个笨方法,就是加入一个基类继承自BaseClass,修饰为Internal,把外面不让访问的成员放到新类中。

唉,算了就只用internal吧,反正本程序集都是自己写能访问也没所谓 --------------------编程问答--------------------
引用 8 楼 yeness 的回复:
基本上看了LZ的问题,有点震惊

有什么震惊,请说,谢谢

--------------------编程问答--------------------
引用 9 楼 TheDolphin 的回复:
明显不是一个类的范畴了,拆成两个


怎么拆? --------------------编程问答-------------------- 可以把基类构造函数做成internal,其它做成protected。这样程序集外无法派生,程序集内只有派生类能访问成员。 --------------------编程问答-------------------- 回11# 大家都混饭,看谁更能混吧。闪了。
补充:.NET技术 ,  ASP.NET
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,