0

私が書く場合:

SomeType simpleName = classWithLongName.otherLongName;

次に、「classWithLongName.otherLongName」の代わりに「simpleName」を使用します。これにより、プログラムが何らかの方法で変更されますか (たとえば、パフォーマンスに関して)?

コンパイラはこれで何をしますか? 「classWithLongName.otherLongName」をコピーして貼り付けますか、「simpleName」を使用するすべての場所で。

4

7 に答える 7

2

simpleNameいいえ、C# コンパイラは " " への呼び出しを " " のコピー アンド ペーストと同じに変換しませんclassWithLongName.otherLongName。違いは重大であるか、単にセマンティックである可能性がありますが、あなたがしているのは、classWithLongName.otherLongName から simpleName に値を割り当てていることです。型が値型であるか参照型であるかによって、その値を操作した場合に何が起こるか、何が起こるかが正確に決まりますが、それを行う際に関数ポインターまたはデリゲートを作成することはありません。

それが実際にパフォーマンスに影響を与えるかどうかは、マイナスの影響がないと言う以外に、ここで答えられるものではありません. を呼び出したときに実際に何が起こるかに依存するため、プラスの効果があるかどうかはわかりませんclassWithLongName.otherLongName。それが高価な操作である場合、これにより高速になる可能性がありますが、欠点は、classWithLongName.otherLongNameその値を にキャッシュした場合、 への後続の呼び出しでの値の違いが反映されないことですsimpleName

于 2009-04-20T14:42:33.373 に答える
0

classWithLongName.otherLongName値がコース内で変更されないことがわかっている場合、常に " " と入力する場合にのみ、コンパイラは値をキャッシュしてそれ自体を再利用することができます。ただし、これはめったにありません。

したがって、「classWithLongName.otherLongName」が何らかの計算を実行する場合、通常は、提案したように手動でローカル変数にキャッシュすることでパフォーマンスが向上します。ただし、キャッシュされた値を操作していて、元の値またはプロパティの変更はキャッシュされた値に反映されないことに注意してください。

ただし、名前の長さは単なるメタデータであり、実行時のパフォーマンスにはまったく影響しません。これは、名前がコンパイル時に内部ハンドルに解決されているためです。

于 2009-04-20T14:41:01.847 に答える
0
  • classWithLongName.otherLongName がプロパティの場合、simpleName を変更しても classWithLongName.otherLongName は変更されません。

  • classWithLongName.otherLongName が値型のパブリック データ メンバー (フィールド) である場合、simpleName を変更しても classWithLongName.otherLongName は変更されません。

  • classWithLongName.otherLongName が参照型のパブリック データ メンバー (フィールド) である場合、simpleName を変更すると classWithLongName.otherLongName が変更されます。

于 2009-04-20T15:11:29.823 に答える
0

あなたの型がオブジェクト(参照)型であると仮定すると、simpleNameはclassWithLongName.otherLongNameによって返されるオブジェクトへの参照を含むことになります。そのオブジェクトのプロパティを何度も呼び出す場合、特にotherLongNameがフィールドではなくプロパティである場合は、パフォーマンスが向上する可能性があります。

于 2009-04-20T15:12:04.860 に答える
0

これはインスタンスまたはクラスに関する質問ですか?

例えば

namespace MyCompany.MyApp.LongNamespaceName
{
    public class MyClassWithALongName {

        public SomeType AnInstanceProperty {get;set;}

        public static SomeType AStaticProperty {get { ... }}
    }
}

今:

//this gets the static property
SomeType simpleName = MyClassWithALongName.AStaticProperty;

または:

MyClassWithALongName anInstanceWithALongName = new MyClassWithALongName();

//this gets the instance property
SomeType simpleName = anInstanceWithALongName.AnInstanceProperty;

これらはさまざまな方法で動作します。

ただし、ここには別のケースがあります。クラスの実際の名前のエイリアスを作成できます。

using simpleName = MyCompany.MyApp.LongNamespaceName.MyClassWithALongName;

...
simpleName anInstance = new simpleName (); 
于 2009-04-20T14:54:08.990 に答える