0

我有一个名为 Car 的类,其属性为 Name。现在,每次我想更改我的汽车名称时,我都必须写 Car1.Name = "Porka Turbo"。现在我想要完成的是少写 5 个字符,如下所示:

Car1 = "Porka Turbo"

它应该像这样工作:如果我分配一个派生自 Car 类的类,它应该进行常规的类分配,但是当我将字符串分配给我的类时,这个字符串应该被重定向到名为“Name”的属性。

这样它的工作方式与以下相同:

Car1.Name = "Porka Turbo"

这在 C# .NET 3.5 中是否可行,如果不是,您是否知道在这个特定示例中可以减少编写代码的任何其他方法?

4

5 回答 5

5

假设Car1是 type 的变量Car,你不能这样做。你也不应该 - 这是一个可读性的噩梦。

对变量的赋值应该意味着变量的值更改为赋值运算符 RHS 上的(可能转换的)值。您正在尝试更改运算符的含义。

如果您对更具可读性的字符数感到困扰:

Car1.Name = "Porka Turbo";

可以创建一个单字母方法:

Car1.X("Porka Turbo");

或其他属性:

Car1.N = "Porka Turbo";

我不会做这两个。保持代码简单易读。如果您优先考虑“源代码中的最少字符数”而不是可读性,那么将来必须维护代码的任何人(可能是您)都不会感谢您。

编辑:尚未提出的一个选项是提供从字符串到 Car 的隐式转换。那会让你写

Car1 = "Porka Turbo";

但它不会更改现有汽车的名称属性——它会创建一辆新车并将该值分配给 Car1。我只提到这一点,以防其他人将其作为一个选项而不提及它的问题:)

于 2009-07-10T10:31:00.463 回答
2

我不知道是否有办法完成您正在寻找的东西(也许有),但我建议不要这样做,因为我会觉得它令人困惑。对于初学者,它会使Car1您的示例中的实例表现得好像它是一个字符串(它不是),并且代码实际做了什么就不太清楚了。

于 2009-07-10T10:30:33.537 回答
1

这是不可能的,因为赋值运算符不能重载。

即使有可能,我也不应该这样做。你有什么收获?
少输入几个字符?记住代码的阅读频率远高于编写的频率这一事实。
当您在一两年后重新阅读/审查该代码时,我想您会摸不着头脑...

此外,假设可以重载赋值运算符:

如果您想将另一个 Car 实例分配给 Car1,您会怎么做?

如果 Car1 为 NULL 你会怎么做?

于 2009-07-10T10:27:46.133 回答
1

不,C# 不允许您重载赋值运算符。

于 2009-07-10T10:30:12.993 回答
1

我认为首先是对 OOP 的一个非常深刻的误解是这个请求的根源。像 C# 这样的面向对象语言的好处是 Car 类型的对象将始终是 Car,仅此而已。字符串永远是字符串,而字符串永远不会是 Car。用双引号括起一段文本恰好是创建新字符串实例的简写。创建新的 Car 实例没有这样的简写。你永远不能说“这个字符串实际上是一辆汽车”,例如,一个字符串没有“名称”属性。

我能说的最好的事情是,继续使用 C#,很快你就会意识到情况就是这样 =)

于 2009-07-10T10:34:32.763 回答