C#中的类和结构共享几个特征:
我们经常使用“class”和“struct”来区分“引用类型”和“值类型”,但有时考虑两种类型的类型是有用的。此外,“引用类型”还包括接口和委托,它们不是类。所以“class”并不意味着任何引用类型,它意味着“引用 _ (填空) _ ”。
例如,如果引用和值类型声明是这样的:
public sealed class ref String { }
public class val Int32 { }
而不是像这样:
public sealed class String { }
public struct Int32 { }
然后单词“class”可以用于表示概念。
我在这里提出的最佳答案是“具体类型”,但这会令人困惑,因为它也可能引用抽象类的非抽象子类。
有什么建议吗?
修改
为了澄清,我不是要求一个可以共同描述类和结构的实例的词。我正在尝试描述类类型和结构类型。
换句话说,如果“class”表示包含System.String
,System.FileInfo
等的集合,而“struct”表示包含System.Int32
,{{1}的集合等等,然后我正在寻找表示这些集合的联合的词。
编辑2
(对Jordão的回答作出反应)回答这个问题的另一种方法是完成以下句子:“所有C#方法实现必须声明为 _ 的成员(填空)< / EM> _ ”。
答案 0 :(得分:4)
我通常使用术语“类型”来引用任何这些元素:类,结构甚至接口和枚举。
我从来没有真正觉得有必要专门讨论类和结构,我可能只会说“类”,然后根据需要区分它们。
答案 1 :(得分:2)
C#中的术语type
可以指代以下任何一个:
object
,dynamic
和string
List<string>
)decimal
和bool
)所有这些都是C#规范中的术语。
class,interface,delegate,struct和enum types也称为type declarations
(或:user-definable types
)。
根据您的观点,您可能还会考虑类型参数和void
类型。
但是,“类别或结构”没有任何特殊用语。用C#规范的语言,可以说:
必须将所有C#方法实现声明为
class
或struct
声明的成员。
答案 2 :(得分:1)
我发现这是一个伪讨论。点#3也可以说关于枚举和接口,关于抽象类的子类不适合混合的观点,我根本就没有得到。我认为你自己对“具体类型”的建议是可以的,但也许你只想把它们当作类和结构来讨论,等等,但是除了抽象类的子类和实现接口的类。你没有找到任何术语的原因可能是它本身并不是一个非常有用的概念。
修改强>
必须将所有C#方法实现声明为 类或结构 的成员。
答案 3 :(得分:1)
应该是微软的术语。这些概念的起源是C ++,其中结构只是所有成员都是公共的类。因此,微软在这里做了一些新的评判,混合了一些C,C ++和Java。所以他们应该发明一个条款。
Microsoft将它们全部表示为“类型”,可以是“值”,“引用”和“指针”:http://msdn.microsoft.com/en-us/library/3ewxz6et(v=vs.100).aspx
但是这些概念并不只收集结构和类。
因此,如果发明一些自定义术语,我们可以从Pascal语言中选择一个,例如,它是“记录”。或者可以从这里创造一些其他术语:http://en.wikipedia.org/wiki/Object_composition
答案 4 :(得分:1)
我意识到这个问题有一个选定的答案,但我相信我可以提供一个仍然有用的新见解:
我认为您要查找的字词可能是模型。这个术语用来表示CS中的几个不同的东西,但是mathematical model的维基百科文章描述了我的内涵。
在此上下文中,模型是某种元语言中系统的描述。一个系统可以用它的三个部分来充分表达:结构;行为;和,互连。 .NET类和.NET结构都与此定义兼容。接口不是,因为没有定义行为。您只能指示方法调用和成员声明的结构以及操作的类型契约(互连)。枚举可能与此定义兼容,也可能不兼容,但最常用的不是,因为它们通常不表达行为。例外是枚举,其中按位运算是有意义的集合运算的充分表示。有了这个前提条件,我认为将枚举与类和结构分类是公平的。
作为旁注,如果扩展方法被解释为它们扩展的类型的固有方法,那么接口和标准枚举都可以被视为系统。但是,编译器和我都不会认为扩展方法是第一个操作数类型的固有方法。更准确的解释是将enum / interface和扩展方法视为系统的必要组件。扩展的这些组件类型和类/结构/特殊情况枚举之间的区别在于类/结构/特殊情况枚举是一个系统本身,因此它的子系统包含系统,而组件类型是一个组件,但不是系统本身。
可能值得澄清的是,在此解释下,术语模型类似于类型,而术语系统类似于实例。系统也可以应用于更大的复合材料,例如装配体,但这不是问题所在。
声明“所有C#方法实现必须声明为模型的成员”似乎有效。它在逻辑上也不需要“所有模型都可以包含自定义方法实现”,因此我们在集合理论枚举的特殊情况下是安全的。它也适用于建模系统是静态扩展方法实现和接口的组合的情况。
答案 5 :(得分:0)
类和结构都是定义对象的类型。它们是面向对象编程语言中的构建块。您可以使用UML或其他一些高级面向对象的建模语言对它们进行建模。在一个或另一个之间的选择是实现细节。