- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在设计一个 UI 管理器类,它将管理我所有的 UI 元素(这是用于 XNA 游戏,因此没有现有的 UI 框架)但我想知道如何处理我需要 UI 管理器的情况对其他类无法访问的 UI 元素中的数据具有特殊访问权限。
例如,我想有一个 SetFocus 方法来聚焦一个特定的元素,这个方法需要确保先前聚焦的元素失去焦点。各个 UI 元素本身无法处理此问题,因为它们无权访问 UI 元素列表,这意味着经理必须处理它,但我如何允许经理和仅管理器在 UI 元素上设置变量?
我想到只将当前获得焦点的元素存储在管理器上,但是我不是特别喜欢该解决方案,并且在给定单个 UI 元素的情况下,我想查询它以确定它是否具有焦点。即使将当前聚焦的元素存储在管理器上是有意义的,因为它只是一个变量,我还需要处理其他事情,如果数据存储在管理器上,则需要数组将数据与元素相关联,并且这似乎违背了 OOP 的目的。
我知道我不需要让经理成为唯一有权访问此数据的人,我可以将所有数据公开,但这不是好的设计。 .
最佳答案
您要找的是a C# equivalent of the C++ friend concept .正如您在链接文章中所读到的那样,“可用的最接近的(并且不是很接近)是 InternalsVisibleTo '(引用乔恩双向飞碟)。但是使用 InternalsVisibleTo
来完成您想要的功能意味着您必须将整个应用程序分解为每个类的库,这可能会造成 DLL hell 。
基于 MattDavey 的示例让我明白了:
interface IFocusChecker
{
bool HasFocus(Control control);
}
class Manager : IFocusChecker
{
private Control _focusedControl;
public void SetFocus(Control control)
{
_focusedControl = control;
}
public bool HasFocus(Control control)
{
return _focusedControl == control;
}
}
class Control
{
private IFocusChecker _checker;
public Control(IFocusChecker checker)
{
_checker = checker;
}
public bool HasFocus()
{
return _checker.HasFocus(this);
}
}
Control
是否获得焦点现在仅存储在 Manager
中,只有 Manager
可以更改获得焦点的 Control
.
为了完整起见,如何将事物放在一起的一个小例子:
class Program
{
static void Main(string[] args)
{
Manager manager = new Manager();
Control firstControl = new Control(manager);
Control secondControl = new Control(manager);
// No focus set yet.
Console.WriteLine(string.Format("firstControl has focus? {0}",
firstControl.HasFocus()));
Console.WriteLine(string.Format("secondControl has focus? {0}",
secondControl.HasFocus()));
// Focus set to firstControl.
manager.SetFocus(firstControl);
Console.WriteLine(string.Format("firstControl has focus? {0}",
firstControl.HasFocus()));
Console.WriteLine(string.Format("secondControl has focus? {0}",
secondControl.HasFocus()));
// Focus set to firstControl.
manager.SetFocus(secondControl);
Console.WriteLine(string.Format("firstControl has focus? {0}",
firstControl.HasFocus()));
Console.WriteLine(string.Format("secondControl has focus? {0}",
secondControl.HasFocus()));
}
}
关于c# - 帮助设计经理类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7565606/
我一直在我的观点上得到这个错误。我无法解决,因为代码类似于djangos教程,只是更改了对象名称。这是我的views.py的代码: from django.http import HttpRespon
我正在尝试做一个简单的查询,但我得到了 'Manager' object is not iterable error. 我的代码(相关部分): def sort(request): sort_
我是第一次构建 spring 应用程序。我遇到了很多并发问题,我怀疑我管理后端的方式有问题。我看到的后端代码和我见过的示例之间的唯一区别是管理器类。 在我的代码中,我有我的模型(由 hibernate
在我遇到不好的例子之前总结一下,et al:我正在尝试制作一个应用程序,我不必在所有模型中编写代码来限制对当前登录帐户的选择(I' m 不使用身份验证或帐户或登录的内置功能)。 即,我不想必须做这样的
我目前正在设计一个需要管理特定硬件设置的软件。 硬件设置如下: 系统 - 系统包含两个相同的设备,并具有相对于整个系统的某些功能。 设备 - 每个设备包含两个相同的子设备,并且具有与两个子设备相关的特
我在我的 Android 应用程序中使用 RoboGuice 3.0.1 和 RoboBlender。我想要一个全局事件管理器,并注意到 RG3.0 已经有了它,如下所述: https://githu
我正在尝试创建一个多态成像系统,它允许各种对象具有封面图像和附加图像。使用 belongs_to :imageable 创建 Image 模型是否正确?或者,我是否应该分离我的逻辑,以便为每个将继承图
我刚刚在运行 rvm get 时收到此消息 RVM can not be run with `set -o posix`, please turn it off and try again. 这也可能
我正在尝试使用 SocialAuth,并根据本指南进行设置: https://github.com/3pillarlabs/socialauth/wiki/Getting-Started-with-i
我正在尝试使用自定义用户模型和自定义用户管理器来构建 super 用户。我做了与 django 文档关于 create_superuser 方法完全相同的事情,并且在我的 shell 中,我能够使用电
我正在尝试使用 AVD 管理器启动虚拟设备,我注意到问题出现在 Android 操作系统早于 Android 6.0 (API 23) 的设备上。 我正在使用 Xamarin.Android C# (
我有两台装有 CentOS 6.5 的 PC client86-101.aihs.net 80.94.86.101 client86-103.aihs.net 80.94.86.103 clouder
关闭。这个问题是opinion-based .它目前不接受答案。 想要改进这个问题? 更新问题,以便 editing this post 可以用事实和引用来回答它. 关闭 8 年前。 Improve
我正在使用 Terraform 代码在 AWS 中创建 Secret。我的 Jenkins 管道将每 2 小时创建一次基础设施并销毁它。 2 小时后重新创建基础设施后,AWS Secrets 不允许我
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 想改进这个问题?将问题更新为 on-topic对于堆栈溢出。 2年前关闭。 Improve this qu
我正在研究 GPS 功能。 我已推迟更新设置,并且正在相应 GPS 委托(delegate)内处理事件 func locationManager(manager: CLLocationManager,
我是一名优秀的程序员,十分优秀!