标签: access-modifiers

计划的"私有保护"C#访问修饰符的含义是什么?

作为GitHub上Roslyn文档的一部分,有一个名为语言功能实现状态的页面,具有C#和VB的计划语言功能.

我无法理解的一个功能是private protected访问修饰符:

private protected string GetId() { … } 
Run Code Online (Sandbox Code Playgroud)

还有一个C#语言设计笔记页面,它解释了许多新功能,但不是这个.

Eric Lippert在评论中说:

您的错误在于将修饰符视为增加限制.实际上,修饰符总是减少限制.请记住,默认情况下,事物是"私人的"; 只有通过添加修饰符才能减少限制.

是什么意思private protected?我什么时候可以使用它?

c# access-modifiers c#-6.0 c#-7.2

132
推荐指数
5
解决办法
1万
查看次数

未指定时隐含哪些访问修饰符?

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

access-modifiers typescript

128
推荐指数
1
解决办法
3万
查看次数

为什么Typescript使用关键字"export"来使类和接口公开?

在尝试使用Typescript的时候,我意识到模块中的类(用作命名空间)不可用于其他类,除非我export在它们之前编写了关键字,例如:

module some.namespace.here
{
   export class SomeClass{..}
}
Run Code Online (Sandbox Code Playgroud)

所以现在我可以使用上面这样的代码:

var someVar = new some.namespace.here.SomeClass();
Run Code Online (Sandbox Code Playgroud)

但是我只是想知道为什么使用这个关键字而不是仅仅使用public在方法级别使用的关键字来表示方法或属性应该是外部可访问的.那么为什么不使用相同的机制来使类和接口等在外部可见?

这将产生如下结果的代码:

module some.namespace.here
{
   public class SomeClass{..}
}
Run Code Online (Sandbox Code Playgroud)

module public access-modifiers typescript

125
推荐指数
2
解决办法
7万
查看次数

Java中的默认访问修饰符是什么?

如果我没有明确说明方法或实例变量的默认访问修饰符是什么?

例如:

package flight.booking;

public class FlightLog
{
    private SpecificFlight flight;

    FlightLog(SpecificFlight flight)
    {
        this.flight = flight;
    }
}
Run Code Online (Sandbox Code Playgroud)

此构造函数的访问修饰符是受保护的还是包的?同一个包中的其他类可以flight.booking调用这个构造函数吗?

java access-modifiers

111
推荐指数
7
解决办法
19万
查看次数

有什么理由在C#中写"private"关键字吗?

据我所知,private是默认无处不在C#中(也就是说,如果我不写public,protected,internal等这将是private默认情况下).(如果我错了,请纠正我.)

那么,编写该关键字的原因是什么,或者为什么它甚至存在于成员中?

例如,当自动生成事件处理程序时,它看起来像这样:

private void RatTrap_MouseEnter(object sender, CheeseEventArgs e)
{

}
Run Code Online (Sandbox Code Playgroud)

但是,如果暗示和默认,为什么它甚至写私人?只是为了让新手开发人员(不知道它是C#默认值)知道它是私有的吗?或者编译器有区别吗?

此外,是否存在写"私人"(单独)改变会员的可访问性的情况?

c# specifications private access-modifiers auto-generate

106
推荐指数
7
解决办法
1万
查看次数

Python中的"私有"(实现)类

我正在编写一个由两部分组成的小型Python模块:

  • 一些定义公共接口的函数,
  • 上述函数使用的实现类,但在模块外部没有意义.

起初,我决定通过使用它在函数内部定义它来"隐藏"这个实现类,但这妨碍了可读性,如果多个函数重用同一个类,则不能使用它.

那么,除了评论和文档字符串之外,是否有一种机制将类标记为"私有"或"内部"?我知道下划线机制,但据我所知它只适用于变量,函数和方法名称.

python access-modifiers

97
推荐指数
7
解决办法
7万
查看次数

"包私有"成员访问是否与默认(无修饰符)访问同义?

我对一些文档使用的术语"包私有"以及"默认访问"的使用感到有些困惑.包私有和默认访问都不是protected的同义词吗?

java terminology protected access-modifiers package-private

93
推荐指数
3
解决办法
7万
查看次数

私人方法真的安全吗?

在Java中,private访问修饰符被认为是安全的,因为它在类之外是不可见的.然后外界也不知道那种方法.

但我认为Java反射可以用来打破这个规则.考虑以下案例:

public class ProtectedPrivacy{

  private String getInfo(){
     return "confidential"; 
  }

}  
Run Code Online (Sandbox Code Playgroud)

现在从另一个班级我将获得信息:

public class BreakPrivacy{

   public static void main(String[] args) throws Exception {
       ProtectedPrivacy protectedPrivacy = new ProtectedPrivacy();
       Method method = protectedPrivacy.getClass().getDeclaredMethod("getInfo", null);
       method.setAccessible(true);
       Object result = method.invoke(protectedPrivacy);
       System.out.println(result.toString());
   }
} 
Run Code Online (Sandbox Code Playgroud)

此时我只是认为私有方法安全,因为做上面的事情我们必须知道方法名称.但是如果包含由其他人编写的私有方法的类我们没有那些可见性.

但是,由于下面的代码行,我的观点变得无效.

Method method[] = new ProtectedPrivacy().getClass().getDeclaredMethods();
Run Code Online (Sandbox Code Playgroud)

现在这method[]包含了上面需要做的所有事情.我的问题是,有没有办法避免使用Java反射这类事情?

我引用Java文档中的一些观点来澄清我的问题.

选择访问级别的提示:

如果其他程序员使用您的类,您希望确保不会发生滥用错误.访问级别可以帮助您执行此操作.使用对特定成员有意义的最严格的访问级别.除非你有充分的理由不使用私人.

java reflection private access-modifiers

92
推荐指数
7
解决办法
5498
查看次数

Java中的静态块未执行

class Test{
    public static void main(String arg[]){    
        System.out.println("**MAIN METHOD");
        System.out.println(Mno.VAL);//SOP(9090);
        System.out.println(Mno.VAL+100);//SOP(9190);
    }

}

class Mno{
    final static int VAL=9090;
    static{
        System.out.println("**STATIC BLOCK OF Mno\t:"+VAL);
    }
}
Run Code Online (Sandbox Code Playgroud)

我知道static在加载类时执行的块.但是在这种情况下,类中的实例变量Mnofinal因为static块没有执行.

为什么会这样?如果我删除它final,它会工作正常吗?

首先分配哪个内存,static final变量或static块?

如果由于final访问修饰符而没有加载类,那么变量如何获取内存?

java static access-modifiers

86
推荐指数
3
解决办法
1万
查看次数

82
推荐指数
3
解决办法
20万
查看次数