0

プロパティ Name を持つ Car という名前のクラスがあります。車の名前を変更したいときはいつでも、Car1.Name = "Porka Turbo" と書かなければなりません。今、私が達成したいのは、次のように書くために5文字少なくすることです:

Car1 = "Porka Turbo"

次のように動作するはずです: Car クラスから派生したクラスを割り当てる場合、通常のクラス割り当てを行う必要がありますが、クラスに文字列を割り当てると、この文字列は「名前」というプロパティにリダイレクトされる必要があります。

以下と同じように動作するように:

Car1.Name = "Porka Turbo"

これは C# .NET 3.5 で可能ですか?そうでない場合は、この特定の例で書き込みを減らす他の方法を知っていますか?

4

5 に答える 5

5

Car1が type の変数であると仮定するとCar、それはできません。あなたもそうすべきではありません - それは可読性の悪夢です。

変数への代入は、代入演算子の RHS の (場合によっては変換された) 値への変数の値の変更を意味する必要があります。演算子の意味を変更しようとしています。

はるかに読みやすいの文字数に悩まされている場合:

Car1.Name = "Porka Turbo";

1 文字のメソッドを作成できます。

Car1.X("Porka Turbo");

または別のプロパティ:

Car1.N = "Porka Turbo";

私はどちらもしません。コードはシンプルで読みやすいものにしてください。将来コードを保守しなければならない人 (あなたかもしれません) は、読みやすさよりも「ソース内の最小文字数」を優先しても感謝しません。

編集: まだ提示されていないオプションの 1 つは、文字列から Car への暗黙的な変換を提供することです。それあなたが書くことができるでしょう

Car1 = "Porka Turbo";

ただし、既存の車の name プロパティは変更されません。新しい車が作成され、その値が Car1 に割り当てられます。これについては、他の誰かが問題について言及せずにオプションとしてドロップした場合にのみ言及します:)

于 2009-07-10T10:31:00.463 に答える
2

あなたが探しているものを達成する方法があるかどうかはわかりませんが(おそらくあるかもしれません)、混乱を招くので、そうしないことをお勧めします. 手始めに、Car1例のインスタンスが文字列であるかのように動作するようになり(そうではありません)、コードが実際に何をするかがあまり明確になりません。

于 2009-07-10T10:30:33.537 に答える
1

代入演算子はオーバーロードできないため、これは不可能です。

出来たとしても、やるべきではない。あなたはそれで何を得ますか?
入力しなければならない文字数が少ない?コードは、書かれるよりもはるかに頻繁に読まれるという事実を頭の片隅に置いておいてください。
1年か2年後にそのコードを再読/レビューすると、頭の後ろを数回引っ掻くことになると思います...

さらに、代入演算子をオーバーロードできるとします。

別の Car インスタンスを Car1 に割り当てたい場合はどうしますか?

Car1 が NULL の場合はどうしますか?

于 2009-07-10T10:27:46.133 に答える
1

いいえ、C# では代入演算子をオーバーロードできません。

于 2009-07-10T10:30:12.993 に答える
1

そもそも、OOP に対する非常に深い誤解が、この要求の根底にあると思います。C# のようなオブジェクト指向言語の利点は、Car 型のオブジェクトが常に Car であり、それ以外のオブジェクトではないことです。文字列は常に文字列であり、文字列が車になることはありません。テキストの一部を二重引用符で囲むことは、たまたま新しい文字列インスタンスを作成するための省略形です。新しい Car インスタンスを作成するための省略形はありません。たとえば、文字列には「名前」プロパティがないなどの理由で、「この文字列は実際には車です」とは言えません。

私が言える最善のことは、C# で作業を続けることです。そうすれば、すぐにこれが事実であることに気付くでしょう =)

于 2009-07-10T10:34:32.763 に答える