如何在c#中创建描述对象的自定义语法?

Sip*_*ipo 5 c# types object

搜索努力:

  1. 谷歌:
  2. 堆栈溢出:

还有一些我不记得了......


预想:每个"内置型" C#(如int,float,char等等)是一个类,并且在C#每类从继承Object类.因此,每个"内置类型"都继承自Object该类.

考虑到这种先入为主,我假设要设置一个double变量,例如,我需要使用"普通"语法设置一些属性.这就是我的意思:

double number = new double();

number.leftSide= 5;
number.rightSide = 23;

Console.Write(number);

// Output:
// 5.23
Run Code Online (Sandbox Code Playgroud)

但是C#有用于创建一个特殊的,相当于语法double变量(在某种程度上,它会做什么,我试图做以上,不就是上面的代码将实际工作):

double number = 5.23;
Run Code Online (Sandbox Code Playgroud)

编译器理解浮点将数字分成两个:5和23.

我的问题是我是否可以对自己的课程做同样的事情.例如,如果我有自己的Time类(这只是一个例子,所以请不要建议使用内置的时间类),我希望有这样的选项来实例化它:

Time time = 10:25;
Run Code Online (Sandbox Code Playgroud)

并且编译器会理解冒号将数字分成小时和分钟(我认为,这是我需要在Time类中创建的属性).

我听说过Roslyn CTP,但我正在寻找一种更简单,内置的方式来做我所描述的.

我可以做吗?

Shr*_*han 8

目前在C#中这是不可能的.你可以做的最接近的是定义从隐式转换stringDate.例如

public class Time
{
    public static implicit operator Time(string value)
    {
        // Initialize your object with value
        // Similar to 
        var values = value.Split(':');
        var hour = Convert.ToInt32(values[0]);
        var min = Convert.ToInt32(values[1]);
        . . .
    }
    . . .   // Your fields, properties and methods
}
Run Code Online (Sandbox Code Playgroud)

这会让你

Time time = "10:25";
Run Code Online (Sandbox Code Playgroud)

  • @Sipo这个答案提供了一个非常好的方式来表达你想要最终实现的目标.我认为其他答案,包括我的,可以提供更多背景信息.就个人而言,我只考虑将`Time`作为`struct`,而不是`class`. (2认同)
  • @Sipo你也可以在`struct`中定义类似的隐式转换. (2认同)