标签: access-modifiers

C# - 在这个例子中改进了属性的封装?

我知道错误"set访问器的可访问性修饰符必须比属性或索引器更具限制性".我也知道解决方案.只是不在这个非常具体的情况下.

考虑这个例子:

    internal virtual bool IsFocused
    {
        get
        {
            return isFocused;
        }
        protected set
        {
            isFocused = value;
        }
    }
    private bool isFocused;
Run Code Online (Sandbox Code Playgroud)

它显示错误.我只是不知道为什么.如何"保护"不比内部更容易获得?这个问题的解决方案是什么?我试着改为"内部保护"而没有运气.

c# access-modifiers

10
推荐指数
3
解决办法
3550
查看次数

使用Public方法的私有类?

这是一段代码:

private class myClass
{
   public static void Main()
   {

   }
}

        'or'

private class myClass
{
   public void method()
   {

   }
}
Run Code Online (Sandbox Code Playgroud)

我知道,第一个不行.第二个会.

但为什么首先不工作?它有什么具体原因吗?

实际上从这个角度寻找解决方案,这就是为什么要大胆.抱歉

c# class access-modifiers public-method

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

Get方法的大小

在代码行方面是否有关于"获取"大小的指导方针或一般共识?我在一个成员上有一个Get方法,这里很容易增长到30行代码.我不确定在什么时候这应该被引入一个方法.但是后来我只会调用类似GetMyString的东西并将值赋给另一个成员并在构造函数中调用它.

有没有值得这样做?

这对SO来说太主观了吗?

c# properties access-modifiers members

10
推荐指数
2
解决办法
472
查看次数

在C#中从派生类调用私有基方法

派生类如何从基类调用方法.
另一方面,其他课程不应该有访问权限.

我的情况:
我有一个基类,我写了一个私有方法来注册一些值.

private void register(string param1, int param2){//...}
Run Code Online (Sandbox Code Playgroud)

我这样做是为了允许子类注册不同的东西.
问题是,派生类无法访问基类的私有方法或字段.
这对我来说很有意义,因为私有意味着私人.

我不想将该方法设为公共,因为其他类不应该能够调用此方法.
有人可以提供解决方案或指导我更好的设计吗?

c# access-modifiers

10
推荐指数
1
解决办法
8424
查看次数

创建一个无法创建其对象的类

我正在攻读我的BS,我的教授给了我一个任务,他说:创建一个类而不使用任何访问修饰符或接口关键字,其对象无法创建.

我通过谷歌但无法找到解决方案.如何在Java中完成?

java class object access-modifiers

10
推荐指数
2
解决办法
2182
查看次数

Swift 4中private和fileprivate有什么区别

在Swift 4中,由于现在private在同一源代码文件中也可以看到扩展,它与fileprivate访问修饰符有什么不同?

背景:在Swift 3中,类中的私有变量在同一文件的扩展中不可见.为此,fileprivate必须使用.

access-modifiers access-control access-levels swift swift4

10
推荐指数
2
解决办法
5803
查看次数

.NET - 如何创建一个类,只有一个其他特定的类可以实例化它?

我想要进行以下设置:

class Descriptor
{
    public string Name { get; private set; }
    public IList<Parameter> Parameters { get; private set; } // Set to ReadOnlyCollection

    private Descrtiptor() { }
    public Descriptor GetByName(string Name) { // Magic here, caching, loading, parsing, etc. }
}

class Parameter
{
    public string Name { get; private set; }
    public string Valuie { get; private set; }
}
Run Code Online (Sandbox Code Playgroud)

从XML文件加载后,整个结构将是只读的.我想这样做,只有Descriptor类可以实例化一个参数.

一种方法是创建一个IParameter接口,然后Parameter在Descriptor类中使类成为私有,但在实际使用中,Parameter将有几个属性,我想避免重新定义它们两次.

这有点可能吗?

.net c# class access-modifiers c#-3.0

9
推荐指数
1
解决办法
3694
查看次数

帮助理解受保护方法的问题

我正在阅读Sybex Complete Java 2认证学习指南2005年4月(ISBN0782144195).本书适用于想要通过java认证的java开发人员.

在关于访问修饰符(以及其他修饰符)的章节之后,我发现了以下问题(#17):

对或错:如果类Y扩展了类X,那么这两个类在不同的包中,并且类X有一个名为abby()的受保护方法,那么Y的任何实例都可以调用Y的任何其他实例的abby()方法.

这个问题让我有点困惑.

据我所知,你可以在同一个类(或子类)的任何变量上调用protected方法.您不能在变量上调用它,层次结构中的变量比您更高(例如,您实现的接口).

例如,您不能仅仅因为继承它而克隆任何对象.

但问题没有提到变量类型,只涉及实例类型.

我有点困惑,回答"真实".

书中的答案是

假.从不同包中的超类继承受保护方法的对象可以在自身上调用该方法,但不能在同一类的其他实例上调用该方法.

这里没有关于变量类型的内容,只有实例类型.

这很奇怪,我不明白.

谁能解释一下这里发生了什么?

java protected certificate access-modifiers

9
推荐指数
1
解决办法
663
查看次数

有引用时可以访问Java私有字段吗?

我今天遇到了以下"奇怪"功能 - 如果您在A类主体中引用了A类中的对象,则可以访问该对象的私有字段 - 即:

public class Foo{
   private int bar;
   private Foo foo;
   public void f()
   {
       if(foo.bar == bar) // foo.bar is visible here?!
       {
            //
       }
   }
}
Run Code Online (Sandbox Code Playgroud)

有人对此有一个很好的解释吗?

java access-modifiers private-members

9
推荐指数
2
解决办法
1808
查看次数

什么时候应该让私有成员静态,以及在我的情况下如何覆盖它

由于私有方法是隐式最终的.

私有或静态或最终方法是早期绑定意味着它们不能被覆盖.

但在我的代码中,它实际上正常运行.

public class B extends A {
    public static void main(String[] args) {
        new B().privateMethod(); //no error -output B-privateMethod.
    }

    private void privateMethod() {
        System.out.println("B-privateMethod.");
    }
}

class A{
    private void privateMethod() {
        System.out.println("A-privateMethod.");
    }

    private static void privateStaticMethod() {
        System.out.println("privateStaticMethod.");
    }
}
Run Code Online (Sandbox Code Playgroud)

此外,我想确保使私有成员静态的好处,除了可以使用class-name.member,而不是类中的非静态成员.它们是私人的,所以不能在课外使用.例如hugeCapacity(),ArrayList类中的方法.

private static final int DEFAULT_CAPACITY = 10;

private static int hugeCapacity(int minCapacity) {
    if (minCapacity < 0) // overflow
        throw new OutOfMemoryError();
    return (minCapacity > MAX_ARRAY_SIZE) ?
        Integer.MAX_VALUE : …
Run Code Online (Sandbox Code Playgroud)

java access-modifiers

9
推荐指数
2
解决办法
170
查看次数