【发布时间】:2014-09-23 18:26:35
【问题描述】:
内置数据类型和用户定义数据类型的主要区别在于:内置数据类型可以接受字面量值(直接插入代码中的值,这个过程也称为硬编码)。
那么是否可以创建与接受三个值的布尔值相同的自定义数据类型: 是/否/也许不使用枚举。
如以下代码:
MyCustomBoolean a = maybe;
我问上面的问题是因为我想了解 C# 中的内置数据类型是用核心语言(例如 C++ int、char...)指示的吗?
---更新---
对于第二个问题,让我问一个问题,让第二个问题更清楚:
我知道例如 string 是 System.String 的别名,但是 C# 中的纯字符串在没有 System.String 的情况下是否可以工作?
【问题讨论】:
-
您无法更改语言的语法(根据定义)。 C# 不支持用户定义的文字(C++ 支持,但仅限于limited extent)。但是,您仍然可以获得看起来类似的代码,例如通过定义一个名为
maybe的MyCustomBoolean类型的变量。 -
在 C# 中:不,完全不可能。尽管它们不会给您任何编译时安全性,但大致隐含的转换运算符更接近。您需要从任何其他现有类型转换的类型。在您的示例中,
maybe不是类型。这对编译器没有任何意义。所以这是不允许的。 -
@Cameron 我知道例如字符串是 System.String 的别名,但是 C# 中的纯字符串在没有 System.String 的情况下可以工作吗?
-
@Cameron C++11 也有
constexpr,它真的很强大,似乎是 OP 正在寻找的。span> -
作为一种解决方法,您可以使用可为空的布尔值 (
bool?),其中null值表示可能。
标签: c# c++ types enums hard-coding