タグ付けされた質問 「c#」

C#は、Microsoftが.NETプラットフォームと並行して作成した、マルチパラダイムで管理されたガベージコレクションのオブジェクト指向プログラミング言語です。

3
C#/ OOPでは貧弱なドメインモデルが悪いと考えられますが、F#/ FPでは非常に重要なのはなぜですか?
でブログの記事楽しさと利益のためにF#上、それは言います: 機能設計では、動作をデータから分離することが非常に重要です。データ型は単純で「ダム」です。そして、別に、これらのデータ型に作用する多くの関数があります。 これは、動作とデータを組み合わせることを意図したオブジェクト指向設計の正反対です。結局のところ、それはまさにクラスです。実際にオブジェクト指向の設計では、振る舞い以外は何もありません。データはプライベートであり、メソッドを介してのみアクセスできます。 実際、OODでは、データ型の周囲に十分な動作がないことは悪いことと見なされ、「貧血領域モデル」という名前さえあります。 C#では、F#から借用し続け、より機能的なスタイルのコードを記述しようとしているようです。なぜデータ/動作を分離するという考えを借りず、それを悪いと考えるのでしょうか?定義がOOPを伴わないというだけなのでしょうか、それともC#で悪いのに何らかの理由でF#に適用されない(そして実際には逆になる)具体的な理由がありますか? (注:私は、ブログ投稿のどちらかの意見に同意しない個人ではなく、善/悪の意見を変える可能性のあるC#/ F#の違いに特に興味があります)。


5
C#開発者として、Javaを学習してAndroid用に開発するか、代わりにMonoDroidを使用しますか?[閉まっている]
私は、C#に精通していると思います。現時点では私の選択言語であり、基本的に私の専門的な経験はすべてここにあります。 それでも、MonoDroidプロジェクトの存在に戸惑っています。私の理解では、C#とJavaは非常に近いということです。例えば、あなたが一方を知っていれば、もう一方を本当に素早く学ぶことができます。ですから、最初のAndroidアプリの開発を検討しているとき、Javaを使い始めて、学習しながら学習するのに十分なJavaに精通していると思いました。 これは、Java Android SDKよりも機能豊富ではない可能性が高いMonoDroidを使用するよりも理にかなっていないのでしょうか。あなたが経験している技術にこだわるよりも、新しい言語(そして、その時点で非常に人気のある言語)を学び、その言語で経験を積む方がいいと思います。で、それ以上の貴重なスキルを獲得することなく。 たぶん、私は平均的な潜在的なMonoDroidユーザーをひどく間違って伝えています。たぶん、Javaと.NETの経験があり、.NETを好む人にとってはもっといいでしょう。または多分(実際にはそうであるかもしれません)私がちょうど考慮しなかった他の要因があります。Javaを使用してAndroid用に開発するのではなく、なぜMonoDroidを使用するのでしょうか?
46 java  c#  .net  android  monodroid 

7
.NETプロパティ-プライベートセットまたは読み取り専用プロパティを使用しますか?
プロパティでプライベートセットを使用し、ReadOnlyプロパティにする場合はどのような状況ですか?以下の非常に単純な2つの例を考慮してください。 最初の例: Public Class Person Private _name As String Public Property Name As String Get Return _name End Get Private Set(ByVal value As String) _name = value End Set End Property Public Sub WorkOnName() Dim txtInfo As TextInfo = _ Threading.Thread.CurrentThread.CurrentCulture.TextInfo Me.Name = txtInfo.ToTitleCase(Me.Name) End Sub End Class // ---------- …
45 c#  .net  vb.net 

4
構造体とクラスがC#で概念を分けているのはなぜですか?
C#でプログラミングしているときに、理解できない奇妙な言語設計の決定につまずきました。 したがって、C#(およびCLR)には2つの集約データ型があります:(struct値型、スタックに格納され、継承なし)およびclass(参照型、ヒープに格納され、継承あり)。 この設定は最初はいい感じに聞こえますが、その後、集計タイプのパラメーターを取るメソッドに出くわし、実際に値タイプか参照タイプかを判断するには、そのタイプの宣言を見つける必要があります。時には非常に混乱することがあります。 一般的に受け入れられている問題の解決策は、すべてstructのを「不変」(フィールドをに設定readonly)として宣言して、起こりうる間違いを防ぎ、structsの有用性を制限しているようです。 たとえば、C ++ははるかに使いやすいモデルを採用しています。スタックまたはヒープのいずれかにオブジェクトインスタンスを作成し、値または参照(またはポインター)で渡すことができます。私はC#がC ++に触発されたと聞き続けていますが、なぜこの1つの手法を採用しなかったのか理解できません。組み合わせるclassとstruct経由で参照として(明示的に)二つの異なる割り当てオプション(ヒープとスタック)と一方の構築物へと値として周りにそれらを渡したりrefしてout、キーワードはいいことのように思えます。 質問は、なぜやったclassし、structC#とCLRで別々の概念の代わりに、2つのアロケーションオプションを持つ1つの集約タイプになりますか?

4
なぜC#開発者は括弧を開くのですか?[閉まっている]
私はここ数年のほとんどを主にC#とSQLで作業してきました。私がこれまでに取り組んできたすべてのプログラマーは、関数または制御フローステートメントの開始括弧を新しい行に配置する習慣がありました。そう ... public void MyFunction(string myArgument) { //do stuff } if(myBoolean == true) { //do something } else { //do something else } 特にif / elseステートメントでは、これがスペースの無駄であることに常に感銘を受けました。そして、C#の以降のバージョンには、次のような代替手段が存在することを知っています。 if(myBoolean == true) //do something on one line of code しかし、ほとんど誰も使用しませんでした。誰もが中括弧で改行をしました。 それから久しぶりにJavaScriptをやり直しました。私の記憶では、JavaScript開発者は以前とまったく同じ中かっこと改行を使用していましたが、ほとんどの開発者はすべての派手な新しいライブラリとものを使用して、宣言の後に開き中かっこを配置しました。 function MyJavaScriptFunction() { //do something } JavaScriptでクロージャーと関数ポインターを使用することが一般的になったため、多くのスペースを節約し、物事を読みやすくするため、この意味を理解できます。だから私はなぜそれがC#で完了したものとして見られなかったのだろうと思った。実際、Visual Studio 2013で上記のコンストラクトを試してみると、実際に再フォーマットされて、開き括弧が新しい行に追加されます。 今、私はコードレビューSEにこの質問を見た: https://codereview.stackexchange.com/questions/48035/questions-responses-let-me-tell-you-about-you これで私はJavaでそれを学んだ、A私があまり馴染みのない言語です。宣言の直後に中括弧を開くのは、最新のJavaScriptのように厳格であると考えられています。 …
44 java  c#  javascript  syntax 

3
C#でエンタープライズプロジェクトのエラーコードパターンを作成するためのベストプラクティス[非公開]
私は多くのSMBや企業に展開されるエンタープライズプロジェクトに取り組んでいます。 このプロジェクトのサポートは苦労するため、エラーのコーディングパターン(HTTPステータスコードなど)を作成したいと思います。これにより、ヘルプデスクの担当者がドキュメントを参照し、できるだけ早く問題をトラブルシューティングできます。 これを行うためのベストプラクティスと推奨事項は何ですか? これを行うためのヘルプは役に立ちます。

8
範囲外の意味のある値の場合に例外をスローするか、自分で処理する必要がありますか?
緯度/経度座標を表す構造体を作成しました。値の範囲は、経度では-180〜180、緯度では90〜-90です。 その構造体のユーザーがその範囲外の値を私に与えた場合、2つのオプションがあります: 例外をスロー(引数が範囲外) 値を制約に変換します -185の座標には意味があるため(極座標なので+175に非常に簡単に変換できます)、受け入れて変換できます。 例外をスローして、彼のコードが持つべきではない値をユーザーに与えたことをユーザーに伝える方が良いでしょうか? 編集:緯度/経度と座標の違いも知っていますが、議論を簡単にするためにそれを単純化したかったのです。

10
コードで100%CPUを使用しないのはなぜですか?[閉まっている]
Windows XP以降で実行されるC#.NET 4プログラムについて具体的に説明していますが、一般的な回答も受け入れられます。 すでに最適化された効率的なプログラムを想定します。ここでの問題は、ハードウェアのCPU使用率が高いことの影響と、実装を効率化するかどうかではなく、使用率の高いプログラムを制限して摩耗を減らすかどうかにかかっています。 今日の同僚は、「最新のCPUは安価であり、100%のCPUで急速に劣化する」ため、データロードプロセスで100%のCPU使用率を目指してはならないと提案しました。 これは本当ですか?もしそうなら、なぜですか?以前は、集中的な操作や長時間の操作には100%のCPU使用率が望ましいという印象を受けていましたが、どちらの方法でも対象に関する立派なソースを見つけることができませんでした。
42 c#  multithreading  cpu  usage 

3
10進数では表現できないが、2進数では表現できる数値はありますか?
C#基数10での正確な表現が必要な数値に使用されるdecimal型を持ちます。たとえば0.1、基数2(floatおよびなどdouble)で表現することはできず、これらの型の変数に格納されると常に近似値になります。 逆の事実も可能かどうか疑問に思っていました。10進数では表現できないが、2進数では表現できる数字がありますか(この場合float、decimalそれらを処理するためにaの代わりにa を使用します)。

14
定数を使用するのは正しい状況ですか?
それで、私の教授は私が取り組んでいるプロジェクトについてフィードバックをしてくれました。彼はこのコードにいくつかのマークを付けました。 if (comboVendor.SelectedIndex == 0) { createVendor cv = new createVendor(); cv.ShowDialog(); loadVendors(); } これは、コンボボックスの「インデックス変更」ハンドラーにあります。ユーザーが新しいベンダーを作成したい場合に使用されます。私の一番上のオプション(インデックス0、変更されることはありません)は[新しいベンダーの作成]ダイアログを開きます。したがって、コンボボックスの内容は次のようになります。 Create New Vendor... Existing Vendor Existing Vendor 2 Existing Vendor 3 彼の問題は最初の行コードにあります: if (comboVendor.SelectedIndex == 0) 彼は、0は定数であるべきだと主張し、そのために実際にマークをドッキングしました。彼は、コードでリテラルを使用すべきではないと主張しています。 問題は、なぜその状況でそのコードを一定にしたいのか理解できないことです。そのインデックスは決して変化せず、微調整する必要があるものでもありません。非常に特定の状況で使用され、変更されない単一の0をメモリに保持することは、メモリの無駄のようです。
42 c# 

13
Any()がnull参照例外をスローしないことを期待するのは理不尽ですか?
拡張メソッドを作成する場合、もちろん、それを呼び出すことができnullます。ただし、インスタンスメソッドの呼び出しとは異なり、nullで呼び出す場合、aをスローする必要はありませんNullReferenceException->手動でチェックしてスローする必要があります。 Linq拡張メソッドの実装について、Any()MicrosoftはArgumentNullException(https://github.com/dotnet/corefx/blob/master/src/System.Linq/src/System/Linq/AnyAll.cs)をスローすることを決定しました。 書かなければならないのはイライラする if( myCollection != null && myCollection.Any() ) このコードのクライアントとして、例えば((int[])null).Any()戻るべきだと期待するのは間違っていますfalseか?

12
C#開発は、使用しているIDEと事実上切り離せませんか?
私はC#を学習しているPythonプログラマーであり、心配するのをやめようとしています。 このスタックオーバーフローの質問で詳述されているように、物事が定義されている場所に関する明示性の欠如という点に私は追いついています。要するに、C#では、using fooどの名前fooが利用可能になっているかを教えてくれません。これはfrom foo import *、Pythonに類似していますfrom foo import bar。 私はむしろC#プログラマーからのこの点に対するスタックオーバーフローの回答に驚いていました。実際には、この明示性の欠如は実際には問題ではありませんでした名前が由来するシステム。例えば: 今、理論的には、これはテキストエディターで探しているときに、C#で型がどこから来たのかわからないことを意味しますが、実際には、それが問題になることはありません。実際にコードを見て、Visual Studioを使用できない頻度はどれくらいですか? これは私に啓示です。多くのPythonプログラマーは、Sublime Text 2やvimのようなコードに加えて、コマンドラインツールとフォルダーやファイルの直接アクセスと操作を使用して、コーディングにテキストエディターアプローチを好みます。このような基本レベルでコードを理解するためにIDEに依存するという考えは、忌み嫌われるようです。この点でC#の文化は根本的に異なっているようです。そして、C#の学習の一環として、それを受け入れて受け入れる必要があるのだろうか。 ここで私の質問に私を導きます:C#開発は、使用しているIDEから事実上不可分ですか?

8
プライベート変数とプロパティ?
ほとんどの場合、クラス内の変数に値を設定すると、次の2つのオプションが表示されます。 private string myValue; public string MyValue { get { return myValue; } set { myValue = value; } } クラス内の変数に値を割り当てる方法を決定する規則はありますか?たとえば、同じクラス内にメソッドがある場合、プロパティまたはプライベート変数を使用して割り当てる必要があります。私はそれが両方の方法で行われたことを見てきましたので、これが選択肢なのかパフォーマンスが要因なのか(おそらく、おそらく)疑問に思っていました。

9
メソッドで空のコレクションを受け入れる必要がありますか?
メソッドのパラメーターを反復処理するforeachループ内ですべてのロジックが実行されるメソッドがあります。 public IEnumerable<TransformedNode> TransformNodes(IEnumerable<Node> nodes) { foreach(var node in nodes) { // yadda yadda yadda yield return transformedNode; } } この場合、空のコレクションを送信すると空のコレクションになりますが、それは賢明ではないのでしょうか。 ここでの私のロジックは、誰かがこのメソッドを呼び出している場合、データを渡すことを意図し、誤った状況でのみ空のコレクションをメソッドに渡すことです。 この動作をキャッチして例外をスローする必要がありますか、空のコレクションを返すのがベストプラクティスですか?

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.