所以我正在探索Reflection类的使用。我注意到一些事情。即使在 Origin 类中,也必须先设置属性的可访问性,然后才能使用属性的值或名称。
我想知道是否可以通过ReflectionClass. 例如
class MyClass
{
public $bathroom = 'Dirty';
protected $individual = 'President';
private $conversation = '****************';
function outputReflectedPublic()
{
$reflection = new ReflectionClass($this);
$props = $reflection->getProperties(ReflectionProperty::IS_PUBLIC);
foreach($props as $prop)
echo $prop->getName() . ' : ' . $prop->getValue($this);
}
}
$obj = new MyClass();
$obj->outputReflectedPublic();//bathroom : Dirty
//now we add a new property
$obj->$ect = 'ify';
$obj->outputReflectedPublic();//bathroom : Dirty //same as before
Run Code Online (Sandbox Code Playgroud)
现在我对此并不感到太惊讶。我试图查看该属性是否作为受保护/私有/静态位于实例中ReflectionProperty::IS_PRIVATE,并带有 ,ReflectionProperty::IS_PROTECTED和ReflectionProperty::IS_STATIC
我还用来$prop->setAccessible(true)防止无法访问的错误。我无法看到该$ect …
这个问题是我在一次采访中被问到的。
我们可以在公共方法中声明私有变量吗?
如果可以的话,我们可以通过public方法访问变量吗?
我尝试使用java,但它不允许在方法内定义私有变量,为什么呢?
public class GetUser {
public String getUserName(){
private String user="David";
return user;
}}
Run Code Online (Sandbox Code Playgroud) 好吧,我是初学者,所以..是的,这可能是一个非常愚蠢的问题.我读到如果我声明变量或对象,而不提及access-modifier(public,private等),而不是自动使其具有Internal acess修饰符(并且它将存在于当前命名空间中的任何位置).
那么为什么我需要在类中将我的变量设置为Public以将它们放在另一个类中(例如我的程序类).
我有以下代码:
public class Library {
public void myFunction() {
// do something
}
}
public class Book extends Library{
protected void myFunction() { // Error here
// do something
}
}
Run Code Online (Sandbox Code Playgroud)
上面的代码有错误,因为Book类试图用较弱的访问修饰符覆盖supper类的函数.我知道这是Java的规则.但我很好奇为什么会这样?它可能导致什么问题?
Java具有私有,受保护和公共访问修饰符.你能解释一下这些修饰语的可访问性范围吗?
如何在不同的包中访问受保护的成员?
我的错误是:
错误1'aCI.CheckTexture.CheckTexture()'由于其保护级别而无法访问
我用这段代码检查一些文件MD5/Hash:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
namespace aCI
{
class CheckTexture
{
Thread Search;
protected CheckTexture()
{
Search = new Thread(Scan);
Search.Start();
}
protected void Scan()
{
if (GetMD5Hash("1.rar") != "9647997C556C5A37A63EFAFBCA4A40D0"
|| GetMD5Hash("2.rar") != "6626959A9099B4C6F5C755E0D2E57EF8"
|| GetMD5Hash("3.rar") != "4D6611A825F81024E0153E2753B8A27E")
{
System.Windows.Forms.MessageBox.Show(
"Sorry come back and restor your orginal files.",
"Error",
System.Windows.Forms.MessageBoxButtons.OK,
System.Windows.Forms.MessageBoxIcon.Error);
return;
}
}
#region Hash Calculator
private static byte[] ConvertStringToByteArray(string data)
{
return (new System.Text.UnicodeEncoding()).GetBytes(data);
}
private static System.IO.FileStream GetFileStream(string pathName) …Run Code Online (Sandbox Code Playgroud) 我最近参加了编程测验并错过了以下问题:
Which of the following are not allowable modifiers for a class?
Choose at least one answer.
A. public
B. private
C. protected
D. abstract
E. final
F. static
Run Code Online (Sandbox Code Playgroud)
我选择了受保护和静态,并将问题误认为是半信用.该课程是在线的,我的导师没有回复我这个问题,所以我想知道正确的答案是什么.
我有一个不一致的问题,我正在创建一个Csharp更新程序,我有一个非常奇怪的时间与一行代码生成此错误:
错误代码1 - 不一致的可访问性:参数类型'ModBoxUpdate.ModBoxUpdateXml'不如方法ModBoxUpdate.ModBoxUpdateInfoForm.ModBoxUpdateInfoForm(ModBoxUpdate.IModBoxUpdatable,ModBoxUpdate.ModBoxUpdateXml)'可访问
这是我遇到问题的代码 - ModBoxUpdateInfo.cs
using System;
using System.Windows.Forms;
namespace ModBoxUpdate
{
public partial class ModBoxUpdateInfoForm : Form
{
//This one here//
public ModBoxUpdateInfoForm(IModBoxUpdatable applicationInfo,
ModBoxUpdateXml updateInfo)
{
InitializeComponent();
if (applicationInfo.ApplicationIcon != null)
this.Icon = applicationInfo.ApplicationIcon;
}
}
}
Run Code Online (Sandbox Code Playgroud)
ModBoxAccept.cs
using System;
using System.Windows.Forms;
namespace ModBoxUpdate
{
internal partial class ModBoxAcceptForm : Form
{
private IModBoxUpdatable applicationInfo;
private ModBoxUpdateXml updateInfo;
private ModBoxUpdateInfoForm ModBoxUpdateInfo;
public ModBoxAcceptForm(IModBoxUpdatable
applicationInfo, ModBoxUpdateXml updateInfo)
{
InitializeComponent();
this.applicationInfo = applicationInfo;
this.updateInfo = updateInfo;
this.Text = …Run Code Online (Sandbox Code Playgroud) 我确信这是一个非常简单的解释,它会让我感到愚蠢,但我无法弄清楚. 第18行的Pastebin:
public static boolean loadTextures() {
try {
final Texture STONE = loadPNG("main\\textures\\stone.png"); // This line here I can't do public static final...
} catch (IOException e) {
return false;
}
return true;
}
Run Code Online (Sandbox Code Playgroud)
我想STONE成为public static final,但是eclipse说只是final一个合法的修饰语.我如何宣布public static final变量?
我一直在更新公司的软件,偶然发现了这个问题.这个枚举是受保护的,我想从枚举中传递一个值作为静态方法的参数,但我不能导致我无法访问它,即使方法和枚举都在同一个类中.
例:
Class SomeClass
{
protected enum Car
{
Id
};
public static void AMethod(Car enumValue)
{
MessageBox.Show("This is an enum:" + enumValue.ToString());
}
}
Run Code Online (Sandbox Code Playgroud)
我不能使用它Car enumValue作为参数AMethod因为我无法访问它.为什么我不能这样做?我的意思是他们在同一个班级.我错过了什么吗?
access-modifiers ×10
java ×5
c# ×4
class ×3
oop ×2
.net ×1
object ×1
php ×1
properties ×1
public ×1