【问题标题】:How to create my own System namespace and objects?如何创建我自己的系统命名空间和对象?
【发布时间】:2010-10-03 16:29:39
【问题描述】:

这里说 http://msdn.microsoft.com/en-us/library/fa13yay7%28v=VS.90%29.aspx(另见http://msdn.microsoft.com/en-us/library/s4wcexbc%28VS.90%29.aspx

如果您想定义,请使用此选项 或创建您自己的系统命名空间 和对象。

但是怎么做呢?在哪里可以找到一些示例?

更新:当然,我的问题不是关于如何创建命名空间或类,而是关于自定义系统架构的示例(UML 架构和源代码)。

例如,这可以用于将 .NET 移植到 iphone 等其他处理器上吗? Mono 用这个吗?

是否有一些最小的可能示例而不是整个商业 clr 可供学习?

【问题讨论】:

  • 你不知道如何定义一个类?还是使用命名空间?
  • 嗯,这些链接会告诉你具体的操作方法......按照他们的指示,只需创建一个名为 System 的命名空间并开始编程。
  • 如果你不知道怎么做,你可能不需要...
  • 我当然知道如何创建命名空间或类。我的问题更多是关于如何创建我自己的架构,所以想看看一些例子。
  • 桌面 CLR 框架类库就是一个例子。 Silverlight CLR 框架类库就是一个例子。 Compact Framework 类库就是一个例子。那里有 很多 的框架示例。

标签: c#


【解决方案1】:

怎么样?只写代码。创建一个名为 System 的命名空间,其中包含一个名为 Object 的类和一个名为 String 的类,编译器将选择并使用它而不是框架类库版本。 这就是框架团队的工作方式。你所要做的就是自己复制他们的所有工作,你也可以在框架类库中提供业务。

请注意,在许多情况下,编译器被设计为期望 System 命名空间中的类型完全,因为它们被记录在案。我过去曾收到过错误报告 - 非常令人困惑的错误报告! - 有人重新定义了System.Collections.Generic.IEnumerator<T>,使其具有与“真实”相比不同的属性和方法,然后他们都对编译器为“ foreach”循环。如果重新定义基本接口是您想要做的事情,请考虑编写您自己的 C# 编译器。我们的设计在这种情况下并不可靠。

【讨论】:

  • 请注意,如果您确实创建了一个名为 System 的命名空间和一个名为 Object 的类,它仍将扩展 [mscorlib]System.Object。如果这确实是框架团队的做法,他们如何让编译器不发出从 [mscorlib]System.Object 扩展的 IL?
  • 没关系,我在 Visual Studio 中找到了阻止链接到 mscorlib 的选项。你们真的什么都想好了!
  • 噢!我只是注意到这是在OP的问题中。我想这就是我在问题之前从 RSS 提要中阅读答案所得到的结果。
【解决方案2】:

我不知道您为什么要这样做,但您只需创建一个自定义“系统”程序集(如标准库)并将其用作您的其他项目中的参考,并设置 /nostdlib+

namespace System 
{
  public sealed class String : IComparable, ICloneable, IConvertible, IComparable<string>, IEnumerable<char>, IEnumerable, IEquatable<string>
  {
     ...
  }
}

【讨论】:

  • 请注意,您还必须实现:System.Object、Byte、Int16、Int32、Int64、Single、Double、Char、Boolean、SByte、UInt16、UInt32、UInt64、IntPtr、UIntPtr、Delegate 、MulticastDelegate、数组、异常、类型、枚举、System.Runtime.InteropServices.OutAttribute、属性、System.Reflection.DefaultMemberAttribute、ParamArrayAttribute、RuntimeTypeHandle、RuntimeFieldHandle、IDisposable、System.Collections.IEnumerable、System.Collections.IEnumerator、Void。哇!
  • 嗯,是什么让软件工程变得有趣 :) 组装库就像组装 PC 一样无聊!
猜你喜欢
  • 2021-06-16
  • 1970-01-01
  • 2010-09-05
  • 1970-01-01
  • 2013-11-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多