- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我在理解容器/组件模型如何在 C# 中相互交互时遇到一些困难。我知道组件如何包含一个站点对象,该对象包含有关容器和组件的信息。但是,假设我有以下代码:
using System;
using System.ComponentModel;
public class Entity : Container {
public string Foo = "Bar";
}
public class Position : Component {
public int X, Y, Z;
public Position(int X, int Y, int Z){
this.X = X;
this.Y = Y;
this.Z = Z;
}
}
public class Program {
public static void Main(string[] args) {
Entity e = new Entity();
Position p = new Position(10, 20, 30);
e.Add(p, "Position");
}
}
这没有问题,它定义了一个容器(实体)和一个包含在其中的组件(位置)。
但是,如果我调用 p.Site.Container
,它将返回实体,但作为 IContainer。也就是说,如果我想访问 Foo,我将不得不显式地执行 (Console.WriteLine(p.Site.Container as Entity).Foo);
之类的操作。这看起来很麻烦。
我是不是遗漏了什么,或者是否有更好的方法来做我想做的事?
最佳答案
您没有遗漏任何东西。没有关于组件可以在哪个容器中的接口(interface)契约。如果您想限制可以添加到容器中的组件类型,您可以重载 Add 方法并检查要添加的组件类型:
public class Entity : Container {
public string Foo = "Bar";
public virtual void Add(IComponent component) {
if (!typeof(Position).IsAssignableFrom(component.GetType())) {
throw new ArgumentException(...);
}
base.Add(component);
}
}
关于c# - 使用 System.ComponentModel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13894088/
有人可以指向我介绍该新 namespace 的网络广播或教程/视频,以及如何使用它来帮助验证诸如用户输入之类的数据吗? 最佳答案 试试这个(对不起,不是视觉上的): ASP.NET MVC Tip #
是否可以序列化(二进制)System.ComponentModel.Container? 最佳答案 不,它没有标记为可序列化。 关于c# - 序列化 ComponentModel.Container?
我正在 ASP.NET 中创建自定义 UserControl,我正在使用 System.ComponentModel.Attributes 用不同的东西装饰属性。默认情况下,ASP.NET 显示所有公
我有一个接受任何对象的函数,然后它从作为输入的属性或字段中获取值。 目前看起来是这样的: private string GetFieldValue(object o, Field f) { //fi
我在理解容器/组件模型如何在 C# 中相互交互时遇到一些困难。我知道组件如何包含一个站点对象,该对象包含有关容器和组件的信息。但是,假设我有以下代码: using System; using Syst
我正在使用程序集绑定(bind),但仍然收到此错误: 无法加载文件或程序集“System.ComponentModel.Annotations,Version=4.2.1.0,Culture=neut
我遇到了一个难以诊断的奇怪问题。将包含命名空间 Matrix.System 的程序集引用添加到 Windows 服务项目后,我现在在编译服务时遇到此错误: The type or namespace
我有一个 .Net Core 3.0 windows 桌面简单项目,它引用了以下 NuGet 包: Microsoft.NETCore.Platforms(3.0.0-preview.3.19128.
我的设计时组件中有许多类别默认展开。 我想让它们默认显示为折叠状态,或者至少在用户看到它们之前有问题地折叠它们。 [Category("Misc")] public int Id { // .
有人能解释一下我们何时以及为什么应该使用 System.ComponentModel.Container 吗?最近我遇到了这个类的使用 here ,但真的不明白有什么好处可以让我们上这门课。 最佳答案
我正在尝试清除我的 C# 项目中的一些警告,其中有几个警告说: Warning 1 The field 'Namespace.Class.components' is assigned but its
我在枚举中使用 Description 属性为枚举字段提供用户友好的名称。例如 public enum InstallationType { [Description("Forward of
我正在尝试在我的 WPF 项目中使用 DataAnnotations 来指定字符串的最大长度,如下所示: using System.ComponentModel.DataAnnotations; 但是
我正在使用 MVC 4、.net 4 和 Entity Framework 6。我的项目正在我的开发机器上构建,该机器安装了 Visual Studio 2010,但在我的构建服务器上我遇到了命名空间
我正在尝试使用 System.ComponentModel.DesignerCategory 防止扩展标签页组件在设计器中自动打开的属性。关于其他 StackOverflow 问题的建议 1 , 2
我刚刚开始使用Caliburn.Micro,它说要导入 System.ComponentModel.Composition.Initialization 在 System.ComponentModel
我正在使用带有 POCO 的 Entity Framework 4 制作 MVC 3 应用程序。我想尽可能多地注释我的所有实体。我遇到了一个问题,但是我找不到关于每个属性含义的好的文档。有些非常直接,
我有一个 View 模型,其中属性具有显示名称。我现在正在制作一个 Excel 工作表,其中包含与网页中的网格相同的数据。我正在使用 closed xml (使用 openxml)在服务器上创建 Ex
我正在尝试将我在 archlinux 上的 monodevelop 中制作的应用程序捆绑在一起。 在 monodevelop 中构建应用程序后,我将使用以下命令打包: mkbundle --deps
我正在尝试在我的系统中实现多语言支持,工作中的其他系统为此使用从他们已经使用了一段时间的数据库生成的 xmlfiles,所以他们希望我也使用它。 我已经设法翻译了我的表单模型中除显示名称之外的所有内容
我是一名优秀的程序员,十分优秀!