问题标签 [access-levels]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
2688 浏览

ios - 由于“内部”保护级别 swift 4,扩展初始化程序不可访问

我在框架内的扩展中有一个便利初始化程序。我想在我的项目的另一个扩展中使用它。它授予我可以访问的所有内容的公共访问权限,但编译器一直说“由于'内部'保护级别,初始化程序无法访问”......

这是我在框架中的扩展:

这是我在项目中的扩展:

错误是当我调用 UIColor(hex) 时。

你知道这里有什么问题吗?

编辑:我添加了框架导入

0 投票
2 回答
2512 浏览

java - Java 定义了一个显式的包私有修饰符

显然,Java 有一个访问级别的包私有,它通过不添加任何显式修饰符来实现。

但是没有办法显式添加这个修饰符吗?当我们只想在包中使用成员时,我们需要省略访问级别,这有点令人困惑。

如果没有办法,为什么 package private 决定成为默认级别?

例如,如果默认级别是公开的,我们会更有意识地定义相关的访问级别。

这不是为什么使用它的问题的重复,因为我知道为什么,我只是不知道为什么它是隐式定义而不能显式定义的。

编辑

您可以使用 Lombok 的@PackagePrivate显式定义它

用于指示注释实体具有包私有访问级别的明确意图。当前由 FieldDefaults 和 Value 使用,以避免使其成为公共、受保护或私有的字段之一。

0 投票
1 回答
1396 浏览

ios - Swift:从不同的目标调用函数

我有两个目标 ( Target A, Target B),Target B我想从中调用一个位于Target A. 尝试Use of Unresolved Identifier按预期编译时出现错误,因为ClassA.swift它不是Target B. 因此,我尝试将 Target 成员资格也设置ClassA.swift为 include Target B,但这样做的问题是ClassA.swift涉及到这么多文件并且还导入了不同的模块。将其他所有内容包含在Target B. 我还尝试通过将其声明为 as 来设置ClassAopen,但这并没有做任何事情(也许我在那里做错了什么)。不太确定我还能尝试Target A从哪里调用该函数Target B

目标 A > ClassA.swift > staticFunctionA()

目标 B > ClassB.swift(调用 staticFunctionA())

ClassA.swift有一些功能,这些功能涉及许多文件。该文件是许多其他功能的包装文件。当然,如果我将此文件作为 的一部分Target B,我也必须将其他文件作为其中的一部分Target B

0 投票
2 回答
142 浏览

c# - 在重写的公共方法中访问私有方法

我目前在从覆盖的公共方法访问私有方法时遇到一些问题。

我的情况是这样的:我有一个编译的 .dll 文件,它基本上由这个组成

我需要改变方法PeformRequest(),所以我创建了一个公共类,它继承OriginalHandler并覆盖了方法:

为确保此方法不违反“影响”范围,我必须确保它仅在某些站点上得到评估,我们使用它来确保 HttpRequestProcess 仅影响使用此的所需站点

所以包括我ModifiedOriginalHandler的包括这个

这是我遇到问题的地方,我可以从 SiteSpecificModifiedOriginalHandler 不调用受保护的方法PeformRequest
但可以调用内部调用所需函数的公共方法Request,所以我创建了一个覆盖函数,以确保原始没有被调用但是我的修改版

这是我遇到问题的地方,RedirectIfConditionIsFulfilled是一个私有方法,我不能这样调用这个方法。我可以在我的重写函数中删除这个调用,但这需要RedirectIfConditionIsFulfilled被删除,这会改变我不想做的原始功能。

那么我该如何克服呢?

如何在覆盖的公共方法中访问私有方法?

0 投票
1 回答
36 浏览

c# - 如何防止引用程序直接访问类?(。网)

我很可能没有正确描述我的标题,并且完全缺乏我想要做的事情的术语......所以如果你正在阅读这篇文章并且知道我应该要求什么......请分享。

所以这是我的问题。我正在创建一个 DLL。这个 DLL 里面当然会有几个类。调用解决方案将需要访问这些类及其各种方法。

但是,我想强制调用程序仅创建“Parent\Root”类的一个实例,因为我需要某些信息,只要他们将使用属于此类的任何内容(想想有点像许可证密钥,但不是真的)。

所以从客户的角度来看..我希望它像这样工作..

现在从我的DLL方面,我在想这样的事情......

现在,只要我将 StoreLogic 和 ShopLogic 类声明为“Public”,我就可以做到这一点。但如果我这样做,客户现在可以这样做......

这是我不想要的。

0 投票
1 回答
6169 浏览

c++ - “'A'类型的临时有受保护的析构函数”,但它的类型是B

在以下代码中,使用 Clang 8.0.0+ 编译,并且-std=c++17使用创建派生类实例B{}会产生错误error: temporary of type 'A' has protected destructor。当临时具有类型(因此应该具有公共析构函数)时,为什么会A出现在此消息中?B

https://godbolt.org/z/uOzwYa

0 投票
1 回答
49 浏览

vb.net - VB.NET 15.5 中私有保护成员的用例是什么?

VB.NET 15.5 为类成员引入了额外的访问级别:Private Protected,如此此处所述

举个例子

我的理解是这应该等同于 just Protected,这意味着它可以在同一个类及其子类中访问,但不能在外部访问。

那么这在什么时候有用,对Protected会员有什么不同呢?

0 投票
1 回答
104 浏览

swift - 由于“内部”保护级别,“init”不可访问

由于“内部”保护级别,“init”无法访问请帮我解决这个问题。谢谢

0 投票
1 回答
457 浏览

vb.net - 访问 IO.FileInfo 受保护属性(OriginalPath)的“最佳”方式?

我正在研究一系列方法,这些方法将测试给定路径以确定它是否(或至少可能)有效。我有几个重载可以接受一个IO.FileInfo对象或一个IO.DirectoryInfo对象——我个人更喜欢用它来帮助在此过程中尽快捕获无效字符。作为流程的一部分,我“需要”获取的一条信息基本上是用户提供的原始值——尤其是IO.FileInfo在对象或对象的情况下,因为它们会自动将值添加到它确定为相对路径的任何字符串IO.DirectoryInfo前面Environment.CurrentDirectory.

例如:

实例化IO.FileInfo具有以下属性(以及其他属性)的对象:

  • DirectoryName-"C:\Development\My Solution\My Project\bin\Debug\Testing"
  • Exists-False
  • Extension-""
  • FullName-"C:\Development\My Solution\My Project\bin\Debug\Testing\This is a test"
  • Name-"This is a test"
  • OriginalPath-"Testing\This is a test"

最后一个属性是我最感兴趣的。它是类的Protected属性,IO.FileInfo继承自IO.FileSystemInfo类,但它似乎是检索传递给IO.FileInfo构造函数的原始值的最佳方法。显然,我不能用简单的方式直接访问该属性Dim TestPath As String = TestFile.OriginalPath- IDE 给出的显示错误“ 'System.IO.FileSystemInfo.OriginalPath' is not accessible in this context because it is 'Protected'” - 所以我只能想到一种方法来获取这条特定信息:创建一个全新的类,该类继承IO.FileSystemInfoPublic属性为从OriginalPath基类读取的。

请注意:我确实有一个接受String值的重载方法,但我实际上正在考虑尝试将其“隐藏”在Private修饰符后面,以便只有FileInfoDirectoryInfo对象可以用于调用此方法。我的主要理由是,如果一个FileInfoDirectoryInfo对象由于字符串中的无效字符(或任何其他原因)而无法实例化,我没有理由调用此方法,我可能能够“清理”代码一点。

无论如何,创建一个真正只用于在这个特定场景中访问这个属性的整个单独的类对于应该至少可以)是一件相当简单的事情来说似乎是一个非常多的开销。不幸的是,我想不出任何其他方法来提取该信息,我只是想知道我是否可能过度思考了这一点。

与此同时,我继续创建了一个TempFileInfo用于测试的类(注意:我还没有实际测试过),而没有为任何常规属性显式实现任何“自定义”代码Public(从IO.FileSystemInfo类继承时需要):

您会注意到,我还包括一个Widening Operator应该允许我从“常规”IO.FileInfo对象转换为我的对象的TempFileInfo对象,以便我可以访问我的“自定义”OriginalPath属性。这是迄今为止我发现的“从这里到达那里”的唯一方法,但我想继续在这里询问,以防有其他建议或我可能忽略的事情。

这种实现方法的唯一“可取之处”是,因为“自定义” TempFileInfo、标准IO.FileInfo和标准IO.DirectoryInfo类都继承自IO.FileSystemInfo该类,我应该能够简单地创建一个重载Widening Operator方法来转换IO.FileInfo对象以及IO.DirectoryInfo对象,而不必创建一个单独的TempDirInfo类。

0 投票
0 回答
60 浏览

laravel - 基于分层的权限

我一直在使用 spatie 包在 laravel 项目中处理 ACL。

例如,我有两种角色:

  1. 员工
  2. 经理

员工只能访问他的个人信息,但经理可以访问他和他的直接/间接员工的详细信息。

我有一个名为“查看员工地址”的权限

对于员工,我知道此权限仅适用于该特定员工,但对于经理,我如何确定权限级别?我的意思是我如何检查是否允许经理只看到他的地址或他的直接/间接员工?