C#程序结构

时间:2009-06-21 03:11:54

标签: c#

我还在学习C#,并没有完成大型程序,只有控制台应用程序。我正在阅读Pro C#3.5,我脑海中有以下问题。

  1. 我看到C#有枚举,如何在大型程序上创建枚举?它们是在一个C#文件中创建的吗?或者它们是否散布在不同的.cs文件中?

  2. 另外,当我在C#express中使用Intellisense时,我看到有数据类型字符串和字符串(大S),它们是否相同?我检查对象浏览器,我认为它们指向同一个类。

  3. 这是一个相当微不足道的问题。我以前在java中编程,它们具有原始数据类型,没有任何继承层次结构。但是当我继续探索C#时,我注意到在C#中的ints,double,float有一些继承层次结构,因为它们继承自 System.ValueType。这是否意味着C#比java更多OO(面向对象)? 我不确定这一点,因为从本书来看,System.ValueType不是具体的类。

  4. 抱歉,如果我的问题可能含糊不清,但我只是一个初学者,正在努力学习。希望你对我有耐心。

    也感谢本网站推荐这本书,我非常喜欢它教授这些主题的方式。

6 个答案:

答案 0 :(得分:8)

1.。)可以在任何你想要的地方创建枚举,但是将它们放在命名空间中逻辑上有意义的地方总是一个很好的经验法则。我通常在名为Constants.cs的名称空间文件夹的根目录中有一个文件,或者包含该名称空间的枚举的文件。

2。)string映射到System.String,因此它们是等效的。

3.)CLR中的所有内容都来自System.Object。 CLR中基本上有两种类型的对象,引用类型和值类型。所有原始类型和枚举都是值类型,这就是它们派生自System.ValueType

的原因

答案 1 :(得分:0)

  1. 您可以在任何现有的.cs文件或.cs文件中单独创建/声明枚举(尽管我建议使用单独的文件)。它与创建/声明类,结构等相同。

  2. 字符串和字符串是相同的类型。 string是映射到CLR String类型的C#内在类型。

  3. 不确定“更多OO”是什么意思。值类型仍然使用堆栈而不是堆。

答案 2 :(得分:0)

我可以尝试回答你的问题:

  1. 我尽量让我的枚举靠近他们需要的地方。也就是说,它们要么在同一个文件中使用(如果只在一个或两个位置使用),要么在同一个文件夹中。 (常见代码的本地化。)例如,我最近制作了一个NavalBattle游戏,并且有一个瓦片类型(深水,浅水,陆地)的枚举以及命令类型的枚举(攻击,移动,投降)。发现它比TileType.Land更清洁,而不是拥有更大的枚举。

  2. 他们是一样的。

  3. 您可能需要阅读:http://msdn.microsoft.com/en-us/library/ms228360(VS.80).aspx

答案 3 :(得分:0)

1)可以在任何您喜欢的地方完成枚举。它们可以在同一个文件中,不同的文件但是同一个类的一部分,我想你甚至可以将它们放在Objects中,但是不要引用我。

2)它们是相同的,我相信这个答案与3有关。

3)C#中的原语实际上是对象。这是否使它比Java更面向对象?这取决于您对面向对象的定义。如果您认为语言带来的数据类型决定了语言的OO,那么是的,C#比Java更面向对象。如果你觉得它与你编写代码的方式以及对象如何工作有关,那么就可以讨论,但我认为它们在这方面大致相同。

答案 4 :(得分:0)

  1. 决定在哪里定义枚举取决于您使用的编码样式我更喜欢将定义保持在接近它用于主要处理的位置。
  2. 字符串和字符串与Int32为int的方式相同,UInt32为uint,对象为Object
  3. C#中的所有内容都派生自Object,值类型派生自ValueType,派生自Object。从ValueType派生的东西是专门处理的,因为它们可能保留在堆栈上,尽管不能保证。有关更多信息,Eric Lippert在http://blogs.msdn.com/ericlippert/archive/2009/04/27/the-stack-is-an-implementation-detail.aspx
  4. 的C#中对堆栈进行了很好的讨论

答案 5 :(得分:0)

  1. 通常情况下,这取决于您,但您应该尝试将使用枚举的类添加到免费的位置。因此,将枚举放在与使用它的类相同的命名空间(理想情况下意味着相同的项目目录)中是很常见的。或者,将所有枚举放在“ProjectNamespace.Constants”的行中并不罕见。想象一下,当你使用一个以枚举作为参数的类时。找到它应该几乎没有时间。

  2. 他们是一样的。另请注意,其他类似的快捷方式(如“int”)会映射到完全限定的名称,如System.Int32。实现这些也很重要。

  3. 一切都来自System.Object,并从那里分支到值和引用类型。要解决这个问题,可以使用创建结构来理解值类型和引用类型的类。