- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
有没有办法在
嵌套
拥有的类的初始化(构造函数逻辑)期间访问包含/封闭类而不需要将引用作为构造函数参数传递?
我不想将对包含类的引用作为构造函数参数传递给
nested
拥有的类的原因是因为实际上我程序中的每个对象会需要它,而且每次手动传递一个无论如何都不会改变的参数感觉很草率。我想尽可能地简化编程,因为我的其他团队成员将使用我的引擎。
我尝试为容器类创建一个方法,在添加新对象时使用该方法将新实例作为参数,然后将该实例的“container”变量设置为“this”(容器类),但是
nested
拥有的对象的初始化代码首先发生,这违背了目的(我希望能够在初始化期间访问容器,因此需要在构造函数之前而不是之后设置容器变量代码被执行)。
有什么方法可以做到这一点?还是我注定要在每次创建新的
nested
拥有的对象时手动传递对容器类的引用?
编辑:
示例:假设我正在制作一款视频游戏,玩家要施放魔法咒语来生成 HealerGoblin:
来自玩家类:
spawnMonster(new HealerGoblin(30)); //30 = Monster's Combat Level
在 HealerGoblin 类中:
public HealerGoblin(int Level)
{
Owner.Health += Level; //Owner in this case, being the player.
}
正如您可能看到的那样,玩家将施放 spawn monster 咒语,选择一个 30 级的治疗地精,治疗地精在生成时具有特殊效果,可以增加主人的生命值一定量(在这种情况下等于地精的水平)。 (请记住这是一个假设,我知道还有其他可能更好的方法可以专门做这样的事情,但这只是我正在尝试做的一个例子)。
所以问题是,游戏中的任何玩家或 NPC 都可以施放该咒语并成为“所有者”。在执行引用所有者的初始化代码时,地精的所有者属性将如何设置?
我知道我可以通过引用传递所有者:
spawnMonster(new HealerGoblin(this, 30); //First argument being what Owner is set to.
但我希望程序中的每个对象都自动引用它们的“所有者”,并在每次初始化新对象时手动放置 (this),并且每次都必须设置一个新的所有者参数当我创建一个新的派生类时,考虑到您永远不会不传递引用,这看起来很草率且违反直觉。
所以我的问题是除了通过构造函数通过引用传递它之外,还有什么其他方法可以在初始化之前获取对容器/所有者对象的引用?如果有的话?
最佳答案
我理解你的痛苦。我也去过那里。但答案是否定的标准编程方式。这也许可以通过使用调用堆栈、反射和一些 hack 工作来实现,但由于您正在尝试简化代码,因此您不希望在代码中包含此类内容。
关于C# 在不传递引用的情况下访问包含类的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17820766/
我想了解 Ruby 方法 methods() 是如何工作的。 我尝试使用“ruby 方法”在 Google 上搜索,但这不是我需要的。 我也看过 ruby-doc.org,但我没有找到这种方法。
Test 方法 对指定的字符串执行一个正则表达式搜索,并返回一个 Boolean 值指示是否找到匹配的模式。 object.Test(string) 参数 object 必选项。总是一个
Replace 方法 替换在正则表达式查找中找到的文本。 object.Replace(string1, string2) 参数 object 必选项。总是一个 RegExp 对象的名称。
Raise 方法 生成运行时错误 object.Raise(number, source, description, helpfile, helpcontext) 参数 object 应为
Execute 方法 对指定的字符串执行正则表达式搜索。 object.Execute(string) 参数 object 必选项。总是一个 RegExp 对象的名称。 string
Clear 方法 清除 Err 对象的所有属性设置。 object.Clear object 应为 Err 对象的名称。 说明 在错误处理后,使用 Clear 显式地清除 Err 对象。此
CopyFile 方法 将一个或多个文件从某位置复制到另一位置。 object.CopyFile source, destination[, overwrite] 参数 object 必选
Copy 方法 将指定的文件或文件夹从某位置复制到另一位置。 object.Copy destination[, overwrite] 参数 object 必选项。应为 File 或 F
Close 方法 关闭打开的 TextStream 文件。 object.Close object 应为 TextStream 对象的名称。 说明 下面例子举例说明如何使用 Close 方
BuildPath 方法 向现有路径后添加名称。 object.BuildPath(path, name) 参数 object 必选项。应为 FileSystemObject 对象的名称
GetFolder 方法 返回与指定的路径中某文件夹相应的 Folder 对象。 object.GetFolder(folderspec) 参数 object 必选项。应为 FileSy
GetFileName 方法 返回指定路径(不是指定驱动器路径部分)的最后一个文件或文件夹。 object.GetFileName(pathspec) 参数 object 必选项。应为
GetFile 方法 返回与指定路径中某文件相应的 File 对象。 object.GetFile(filespec) 参数 object 必选项。应为 FileSystemObject
GetExtensionName 方法 返回字符串,该字符串包含路径最后一个组成部分的扩展名。 object.GetExtensionName(path) 参数 object 必选项。应
GetDriveName 方法 返回包含指定路径中驱动器名的字符串。 object.GetDriveName(path) 参数 object 必选项。应为 FileSystemObjec
GetDrive 方法 返回与指定的路径中驱动器相对应的 Drive 对象。 object.GetDrive drivespec 参数 object 必选项。应为 FileSystemO
GetBaseName 方法 返回字符串,其中包含文件的基本名 (不带扩展名), 或者提供的路径说明中的文件夹。 object.GetBaseName(path) 参数 object 必
GetAbsolutePathName 方法 从提供的指定路径中返回完整且含义明确的路径。 object.GetAbsolutePathName(pathspec) 参数 object
FolderExists 方法 如果指定的文件夹存在,则返回 True;否则返回 False。 object.FolderExists(folderspec) 参数 object 必选项
FileExists 方法 如果指定的文件存在返回 True;否则返回 False。 object.FileExists(filespec) 参数 object 必选项。应为 FileS
我是一名优秀的程序员,十分优秀!