問題タブ [struct]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - .NET で構造体の既定のコンストラクターを定義できないのはなぜですか?
.NET では、値型 (C# struct
) にパラメーターのないコンストラクターを含めることはできません。この投稿によると、これは CLI 仕様によって義務付けられています。何が起こるかというと、すべての値型に対して、すべてのメンバーをゼロ (またはnull
) に初期化するデフォルトのコンストラクターが (コンパイラーによって?) 作成されます。
そのようなデフォルトのコンストラクターを定義することが許可されていないのはなぜですか?
1 つの些細な使用法は、有理数です。
C# の現在のバージョンを使用すると、デフォルトの Rational は0/0
それほどクールではありません。
PS : C# 4.0 でこれを解決するには、既定のパラメーターを使用しますか? それとも、CLR で定義された既定のコンストラクターが呼び出されますか?
ジョン・スキートはこう答えました。
あなたの例を使用すると、誰かがしたときに何が起こりたいですか:
コンストラクターを 1000 回実行する必要がありますか?
確かにそうすべきです。それが、最初にデフォルトのコンストラクターを作成した理由です。明示的な既定のコンストラクターが定義されていない場合、CLR は既定のゼロ化コンストラクターを使用する必要があります。そうすれば、使用した分だけ支払うことができます。次に、デフォルト以外の 1000 個のコンテナーが必要な場合Rational
(および 1000 個の構造を最適化したい場合)List<Rational>
は、配列ではなく a を使用します。
私の考えでは、この理由は、デフォルトのコンストラクターの定義を妨げるほど強力ではありません。
c# - 同じであるが制約されていないジェネリック型の 2 つの要素を等しいかどうか比較する方法は?
重複の可能性:
演算子 == を C# のジェネリック型に適用できませんか?
私は次の汎用クラスを持っていますが、コンパイラは " Operator '!=' cannot be applied to operands of type 'TValue' and 'TValue'
" ( CS0019を参照) と不平を言います:
に制約TValue
するとclass
、 を使用できますObject.Equals()
。構造体とクラスの両方にこれが必要なので、それを避けることができればとてもうれしいです。
問題は、同じであるが制約のないジェネリック型の 2 つの要素が等しいかどうかを比較するにはどうすればよいかということです。
c# - C# の構造体でファクトリの使用を強制するにはどうすればよいですか
引数なしのコンストラクターの呼び出しを禁止する必要がある ac# 構造体があります。
有効なデフォルト値がなく、すべてのメンバーに有効な値が必要であるため、主にすべてのメンバーに明示的な値を強制するためにこれを行っています。
C++ ではこれは簡単です。プライベート コンストラクターを追加しますが、c# では許可されません。
上記を防ぐ方法はありますか?
ファクトリの使用を強制する必要があるため、すべてのパブリック コンストラクター呼び出しを防止することも同様に機能します。
完全な開示者: 単一の依存関係を回避するために、C# アプリは自動的に D に変換され、new Struct()
その結果がポインターになり、これが私にとって厄介なことになっています。ただし、この質問はそれにもかかわらず関連性があるため、無視してください。
c - C ポインターの混乱
文字列をメモリに保存し、後で読みたい:
行 B と行 D は同じアドレスを示していますが、行 C の printf はセグメンテーション違反で失敗します。私は何が欠けていますか?
どんな助けでも本当に感謝します!
c - 構造とユニオンの違い
struct
aとaの違いを示す良い例はありますunion
か?struct
基本的に、それはそのメンバーのすべてのメモリをunion
使用し、最大のメンバーのメモリスペースを使用することを知っています。他にOSレベルの違いはありますか?
c# - C# - すべての構造体が初期化されていることを確認するにはどうすればよいですか?
大規模な計算を行うアプリケーションを C# で作成しています。すべてが基本的な構造体 - 値を中心に進んでいます。これは基本的に double で、いくつかの追加パラメータ (accuracy など) があります。構造体である必要があります。これは、作成されるパラメータが多すぎてヒープを割り当てることができないためです。ここで、それらがすべて正しく初期化されていることを確認する必要があります。デフォルトの明示的なコンストラクターを宣言することはできませんが、すべてを 0 で初期化するデフォルトのコンストラクターが提供されていますが、これは私のドメインでは意味がありません。
また、パラメーターを使用してコンストラクターを呼び出さずにインスタンスの作成を拒否する方法はありません...?
基本的に私が必要とするのは、このテストに合格することです:
コンストラクターが明示的に呼び出されておらず、構造体がまだアクセスされていない場合は、例外をスローしても問題ありませんが、常にチェックすると時間がかかりすぎます。
私は今、ほとんど希望を失っています, 助けてください!
c - Cの構造体へのポインタへのポインタを操作する方法は?
ダブルポインタの下の構造体のメンバーを変更したい。どのようにするか知っていますか?
サンプルコード
c - C構造体を文書化するためのプログラム?
C 構造として記述されているバイナリ ファイル形式 (またはパケット形式) を使用している場合、その構造を解析して、プロトコルに関する適切なドキュメントに変換するプログラムはありますか?
もちろん、構造体には、フォーマットを記述する必要に応じて、配列やその他の構造体などが含まれます。ドキュメントには、おそらくパッキング、エンディアンなどを含める必要があります。