我想在属性上有一个具有不同访问修饰符的对象的多个版本
例如,我可能有一个用户类 -
public abstract class UserInfo
{
internal UserInfo()
{
}
public virtual int ID { get; set; }
public virtual string Password { internal get; set; }
public virtual string Username { get; set; }
}
public class ReadUserInfo : UserInfo
{
internal ReadUserInfo()
{
}
override public int ID { get; internal set; }
override internal string Password { get; set; }
override public string Username { get; internal set; }
}
public class NewUserInfo : UserInfo …Run Code Online (Sandbox Code Playgroud) 以下是等效的吗?
private static boolean readAllFiles = false,readAllDirs = false;
private static boolean readAllFiles = false;
private static boolean readAllDirs = false;
Run Code Online (Sandbox Code Playgroud)
如果是这样,他们是否仍然拥有不同值的相同修饰符?
private static boolean readAllFiles = false,readAllDirs = true;
Run Code Online (Sandbox Code Playgroud) 经过一番研究后,我确定您可以应用于类的唯一访问修饰符是:
但是下面的错误消息似乎暗示如果一个类没有在命名空间中定义,那么它可以被定义为private,protected或protected internal.
public和internal是唯一可以在课堂上使用的类修饰符还是更多?
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Test2343434
{
class Program
{
static void Main(string[] args)
{
Tools.ToolManager toolManager = new Tools.ToolManager();
Console.ReadLine();
}
}
}
namespace Tools
{
//error: Elements defined in a namespace cannot be explicitly
//declared as private, protected, or protected internal
private class ToolManager
{
public ToolManager()
{
Console.WriteLine("inside tool manager");
}
}
}
Run Code Online (Sandbox Code Playgroud) 我对此感到有点困惑,而我在这里浏览建议的答案并没有产生在我的上下文中起作用的直接结果.
我的问题是基本的.让我们假设我有一个像这样的方法.
private int someFunction(int x, int y){
return (x+y+5)
}
Run Code Online (Sandbox Code Playgroud)
但是我想从main调用这个函数(public static void main(String args[]) ).我该怎么做呢?
如果有一个教程,你认为在这种情况下会帮助我,我也会非常感激.
我有以下类(示例):
public class Dog
{
int numberOfTeeth;
public Dog()
{
countTeeth();
}
private void countTeeth()
{
this.numberOfTeeth = 5; //this dog has seen better days, apparently
}
}
Run Code Online (Sandbox Code Playgroud)
在我创建狗对象后,它应该计算出牙齿的数量.我希望能够访问该值而无法在类本身之外修改它.
Dog d = new Dog();
int dogTeeth = d.numberOfTeeth; //this should be possible
d.numberOfTeeth = 10; //this should not
Run Code Online (Sandbox Code Playgroud)
但是,我无法弄清楚哪个访问修饰符可以让我这样做.我已经尝试了以下所有方法:
如果我numberOfTeeth 私有,我无法访问它.
如果我使numberOfTeeth 内部保护,我可以在课外改变这个值.
如果我做numberOfTeeth 内部,我可以在课外改变这个值.
如果我numberOfTeeth 保护,我无法访问它.
如果我numberOfTeeth 公开,我可以在课外改变这个值.
我也尝试将其设为只读,但后来无法在构造函数之外设置它.
是否有任何访问修饰符可以让我这样做?或者是否有其他方法可以实现这种保护?
我知道具有默认访问控制的类成员可以在包级别访问,但我对包级访问实际意味着什么感到困惑.如果可以在包级别访问默认成员,那么在下面的示例中,我不应该在类Test2中看到它吗?1级
package pkg1;
public class Test {
int i=0;
}
Run Code Online (Sandbox Code Playgroud)
2级
import pkg1.Test;
public class Test2 {
void get(){
Test t = new Test();
t.i=0;
}
}
Run Code Online (Sandbox Code Playgroud)
请帮我理解这个概念.提前致谢.
好的,让我从一个例子开始.这是我在另一个程序集中的基类
namespace BL
{
public class BasicClass
{
protected internal void func()
{
//Code Logic
}
}
}
Run Code Online (Sandbox Code Playgroud)
现在这是我在另一个程序集中的派生类
namespace DL
{
public class DerivedClass:BasicClass
{
private void hello()
{
func();
}
}
}
Run Code Online (Sandbox Code Playgroud)
我能够调用func()from基类,因此它显示了protected 访问修饰符属性,但访问修饰符属性如何.因为它声明了内部,所以internal允许它访问func()另一个程序集.如果那么为什么调用它protected internal而不是简单protected
我遇到了一个相当奇怪的行为,并且不确定这是Java问题还是Eclipse问题.
请使用以下代码:
class Foo {
private String text;
public void doStuff(Foo f) {
System.out.println(f.text);
}
}
Run Code Online (Sandbox Code Playgroud)
这里的问题是,为什么f.text可以访问?这是一个私有领域,所以根据我的逻辑,它不应该,但IDE似乎认为它是.
在Java中,通常标记辅助方法protected而不是private,因此同一包中的单元测试可以测试辅助方法.(具体来说,我正在使用JUnit.)
这似乎在Kotlin中不起作用.建议使用什么访问修饰符?
我正在开发一个为每个应用程序功能创建模块的应用程序。我必须从一个模块UI控制器切换到另一个模块UI控制器。
我在模块中有UIController,并将该控制器标记为公共访问标识符,如下所示
public class InterAccountTransferViewController: UIViewController {
override public func viewDidLoad() {
......
......
}
}
Run Code Online (Sandbox Code Playgroud)
上面的类还实现了扩展中的UITextField委托。当我将上述类创建为“开放访问”时,我在TextField委托上收到警告,如下所示
实例方法“ textFieldDidBeginEditing”几乎与协议“ UITextFieldDelegate”的可选要求“ textFieldDidBeginEditing”匹配
现在不调用文本字段委托。当我试图通过将代表设置为私人身份来关闭警告时,仍然没有调用他们。
请让我知道如何使这些警告静音并同时致电代表。
任何想法或建议都很好。我正在使用Swift 4.2开发Xcode 10。请让我知道是否需要进一步解释我的问题。