通常一个类的constructor是protected的时候,是不希望用户直接调用它.
但是我发现可以用这么一个方法来实现调用:
但是我发现可以用这么一个方法来实现调用:
关于protected成员的调用,以前有类似的blog的.关于protected的Quiz
protected的成员是不能变相被子类调用的,例如
protected的成员是不能变相被子类调用的,例如
是不能编译通过的,但constructor却能通过
当然,如果该类是sealed就不行了,那么protected和private也没有区别了.
打印 | 张贴于 2004-12-12 23:50:00 | Tag:DotNet
留言反馈
你好:问你一个问题,问什么你的js加密混淆器,加密后,怎么调用那些代码
帮个忙解决一下这个问题,
这是那段代码在C#2.0中的编译错误
Cannot access protected member 'ClassA.ClassA()' via a qualifier of type 'ClassA'; the qualifier must be of type 'ClassX' (or derived from it)
我们可以很好的理解这样设计的意图,我非常认同这一修改。不过这个修改对于C#来说是"Break"的,即会导致旧的代码无法在C#2.0编译。
>关于这个,前一段我看到了一篇Blog。说这是C#的Bug,将在2.0中
>修正,但在IL级别这是允许的。VB也有一个有趣的Bug,那就是类
>可以继承自它里面的嵌套类。
本来无端倪,何处惹疑猜
比如这样的用法应该很多吧!
class C{
private C(){}
public static C getC(){
reutrn new C();
}
}
这样的代码自然可以访问,请看 关于protected的Quiz 中,我给的回复,protect 控制的是直接访问和 访问者的类型
举例:你电脑里面秘密只有你或者你的朋友可以看,但如果你的朋友出卖你,那不是你的朋友也能间接知道你的秘密的
发上来的代码写错了.
关于这个,前一段我看到了一篇Blog。说这是C#的Bug,将在2.0中修正,但在IL级别这是允许的。VB也有一个有趣的Bug,那就是类可以继承自它里面的嵌套类。
in 1.1.4322,
TestCS.cs(12,10): error CS0122: 'ClassA.ClassA()' is inaccessible due to its
protection level
in 2.0.40607,
TestCS.cs(12,10): error CS0122: 'ClassA.ClassA()' is inaccessible due to its
protection level