标签: access-modifiers

C#中的默认访问修饰符

如果我将创建一个如下所示的新对象,默认情况下它具有哪个访问修饰符?

Object objectA = new Object();
Run Code Online (Sandbox Code Playgroud)

c# object access-modifiers

13
推荐指数
1
解决办法
7101
查看次数

C++子类化访问修饰符?

我是C++新手,我有很多关于OO语言的经验,比如C/C#/ Objective-C.现在,我正在学习C++.

我看到了这个C++代码:

    class World : public State
    {
    };
Run Code Online (Sandbox Code Playgroud)

似乎WorldState公开继承了这个类.公共子类化?这很难理解.

这个功能的概念是什么?什么时候有用或需要?

c++ inheritance access-modifiers subclassing

13
推荐指数
2
解决办法
6542
查看次数

Scala:通过包外的结构类型访问包可见方法

这不能按预期工作(因为我试图run从外部调用包私有Services):

object Services {
 class HelloPrinter {
   private[Services] def run = "Hello"
  }  
}

val obj = new Services.HelloPrinter
Run Code Online (Sandbox Code Playgroud)

但是,令人惊讶的是这有效:

val obj: {def run: String} = new Services.HelloPrinter
obj.run
Run Code Online (Sandbox Code Playgroud)

我会说,它是编译器中的一个错误,因为HelloPrinter由于包可见性规则而与结构类型不匹配,所以它根本不应该编译!

这是程序编译但抛出运行时异常(java.lang.NoSuchMethodException)的情况:

class HelloPrinter {
  private[HelloPrinter] def run = "Hello"
}  

val obj: {def run: String} = new HelloPrinter
obj.run
Run Code Online (Sandbox Code Playgroud)

这是我缺少的语言功能或规则,还是合法的Scala中的错误?

reflection scala access-modifiers nosuchmethoderror structural-typing

13
推荐指数
1
解决办法
190
查看次数

Java 9中的"模块本地"访问行为

由于Jigsaw项目的核心是Java模块系统,因此能够仅限制对特定模块内特定程序元素(类,方法和字段)的访问是很好的.

当模块中的某些元素对于此模块基本上是公共的时,它可能会有所帮助,但不应在此模块外部访问.

所以我说的是"package-local"之后的下一级访问,可以命名为"module-local".

然而,简要介绍Jigsaw规则和早期规范并没有帮助我弄清楚这种功能.更具体地说,Modifier规范不包含任何新元素.

那么在未来的Java 9中还有其他任何可能吗?

java access-modifiers java-platform-module-system java-9

13
推荐指数
2
解决办法
1634
查看次数

嵌套匿名结构上忽略C++私有修饰符

下面的示例代码在Visual C++中编译得很好:

class Test {
private:
    struct {
        struct {
            int privateData;
        };
    };
};

int main(int, char **)
{
    Test test;
    test.privateData = 0;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

但为什么?我期望编译器错误,因为privateData函数main应该无法访问该成员,因为它应该private像它的容器容器一样.我知道无名结构不是官方C++的一部分,但这个设计是asinine.

顺便说一句,我也试图改变privateprotectedstructunion:它看起来像编译器拒绝兑付匿名结构和联合嵌套在另一个匿名结构或联合内部的访问修饰符.

有人可以解释这个功能吗?

c++ nested private access-modifiers anonymous-struct

12
推荐指数
1
解决办法
814
查看次数

错误1可访问性不一致:返回类型比方法更难访问

当我建立时,VS显示错误.这是我的代码:

public Composite buildComposite(ComboBox subs, ComboBox bas)
{
    int count = 0;
    Composite a = new Composite();
    if (subs.SelectedItem != null)
    {
        foreach (Substance d in listSubstance)
        {
            if (String.Compare(d.notation, subs.Text) == 0)
            {
                count++;
                a.subs = new Substance(d);
                break;
            }
        }
    }
    if (bas.SelectedItem != null)
    {
        foreach (Base g in listBase)
        {
            if (String.Compare(g.notation, bas.Text) == 0)
            {
                count++;
                a.bas = new Base(g);
                break;
            }
        }
    }
    if (count > 0)
    {
        a.equilibrium();
        a.settypesubs(arrayDefinition);
        return a;
    }
    else …
Run Code Online (Sandbox Code Playgroud)

c# access-modifiers winforms

12
推荐指数
2
解决办法
4万
查看次数

Java:将公共类方法暴露给同一项目的所有包,但为其他项目设置私有

我有一个包含两个软件包的库项目,分别是package1和package2,分别是class1和class2.class1有一些公共方法暴露给最终用户.我想在class1中添加一些只有class2才能访问的实用方法.我搜索了很多,但我找不到任何访问修饰符的方法只授予相同项目的不同包的访问权限.

有机会以任何方式实现它吗?

更新(代码示例):

package1中的Class1:

package com.example.package1;

public class Class1 {

    // This method should only be accessed by Class2, cannot made it public for
    // every class
    void performUtilityOperation() {
        // internal utility
    }

    // other public methods...
}
Run Code Online (Sandbox Code Playgroud)

package2中的class2:

package com.example.package2;

import com.example.package1.*;

public class Class2 {

    Class1 class1;

    public void setClass1(Class1 class1) {
        this.class1 = class1;
    }

    public void doSomeOperation() {
        this.class1.performUtilityOperation(); // here this method is not
                                                // accessible if not public
        // do some other operations …
Run Code Online (Sandbox Code Playgroud)

java oop design-patterns access-modifiers

12
推荐指数
1
解决办法
3495
查看次数

如何在同一框架内访问Objective-C中的内部Swift类?

致力于混合框架.在Obj-C文件中导入,但内部类不可见,只有公共类.

文档清楚地说明Swift和Obj-C之间应该有内部分支:

将Swift导入Objective-C
要在与Objective-C代码相同的框架目标中导入一组Swift文件,您不需要将任何内容导入到框架的伞形头中.相反,将您的Swift代码的Xcode生成的头文件导入到您想要使用Swift代码的任何Objective-C .m文件中.因为框架目标的生成标头是框架公共接口的一部分,所以只有标记为public修饰符的声明才会出现在框架目标的生成标头中.您仍然可以在框架的Objective-C部分中使用使用内部修饰符标记的Swift方法和属性,只要它们在从Objective-C类继承的类中声明即可.有关访问级别修饰符的更多信息,请参阅 Swift编程语言(Swift 2)访问控制.

代码示例(使用框架创建新项目)

// SwiftObject.swift

public class SwiftObject: NSObject {
    public class func doSomething() {}
}

internal class YetAnotherSwiftObject: NSObject {
    internal class func doSomething() {}
}
Run Code Online (Sandbox Code Playgroud)
// SomeObject.m file

@implementation SomeObject

- (void)someMethod {
    [SwiftObject doSomething];
}

- (void)someOtherMethod {
    [YetAnotherSwiftObject doSomething]; // Use of undeclared identifier
}

@end
Run Code Online (Sandbox Code Playgroud)

frameworks access-modifiers objective-c ios swift

12
推荐指数
2
解决办法
3929
查看次数

为什么我能够从类外部访问私有类变量,我该如何防止它?

我正在使用此代码

type
 TSomeClass = class(TOBject)
 private
  class var InstanceCount : integer;
  class var TotalInstanceCount : integer;
 public
  class function instances: integer;
  class function totalInstances: integer;
  constructor Create;
  destructor Destroy;
end;

constructor TSomeClass.Create;
begin
 inherited Create;
 Inc(InstanceCount);
 Inc(TotalInstanceCount);
end;

destructor TSomeClass.Destroy;
begin
 Dec(InstanceCount);
 inherited;
end;

class function TSomeClass.instances;
begin
  Result := InstanceCount;
end;

class function TSomeClass.totalInstances;
begin
  Result := TotalInstanceCount;
end;
Run Code Online (Sandbox Code Playgroud)

我想创建一个实例计数器,并将一些类变量设置为私有.问题很简单,看看这张图:

在此输入图像描述

正如您在红色框中看到的那样,我声明为私有的类变量.我不希望它们出现.我只希望公共类函数能够显示计数器.我能做什么?

delphi access-modifiers

12
推荐指数
1
解决办法
1118
查看次数

Public alias for non-public type

I wonder if it is valid C++ :

class Test {
    struct PrivateInner {
        PrivateInner(std::string const &str) {
            std::cout << str << "\n";
        }
    };

public:
    using PublicInner = PrivateInner;
};

//Test::PrivateInner priv("Hello world");        // Ok, private so we can't use that
Test::PublicInner publ("Hello World");           // ?, by using public alias we can access private type, is it ok ?
Run Code Online (Sandbox Code Playgroud)

c++ alias access-modifiers

12
推荐指数
1
解决办法
113
查看次数