1

そうそう、ワンライナーが大好きで、いろんなものを凝縮するのが上手になってきました。どういうわけか、彼らは私を幸せにし、私が学ぶのを助けてくれます. コンピュータープログラマーの人生のハイライト!

とにかく、キャストされたオブジェクトの割り当てを使用して、これについて助けが必要です:

単純なプロパティの例を次に示します。

protected InterfaceType Object{
    get{ return (InterfaceType)this.Page;} // no red squigglies, works fine
    set{ (InterfaceType)this.Page = value; } // red squigglies(left hand of argument must be a variable, property or indexer)
}

しかし、私はこれを行うことができます:

protected InterfaceType Object{
    get{ return (InterfaceType)this.Page;} // no red squigglies, works fine
    set{ var o = (InterfaceType)this.Page; o = value; } // works fine
}

(InterfaceType)this.Page が次のようにオブジェクトを返す場合:

return (InterfaceType)this.Page;

そして、私はそれをものに割り当てることができます:

var o = (InterfaceType)this.Page;

そしてそれに何かを割り当てます:

o = value;

私には、何かへの新しい不要なポインターを作成しているように感じます。以下は、それを取得できる場合、このオブジェクト自体への単なるポインターであるため:

(InterfaceType)this.Page
4

3 に答える 3

1

おそらく、this.page の後の余分なセミコロンを削除し、型キャストを削除する必要があります。

変化する

set{ (InterfaceType)this.Page; = value; }

set{ this.Page = value; }
于 2013-03-22T16:40:17.600 に答える
1

ここにはいくつかの問題があります。this.Pageのインスタンスとして宣言された場合、キャストInterfaceTypeはまったく必要ありません。

これは、セッターにあるInterfaceType型にのインスタンスをダウンキャストしようとしていることを示しています。Page明らかに、それは安全ではなく、キャストはとにかく機能しません。私はそれを次のように変更します:

set { this.Page = (value as WhateverTypePageIs); }

これは、キャストが無効な場合にセッターが例外をスローしなくなり、単純に に設定されることを意味しthis.Pageますnull。それが望ましくない場合は、次を使用できます。

set { this.Page = ((WhateverTypePageIs)value); }

それでも例外がスローされます。

しかし、これはすべて、より深い問題を示しています。セッターを持ちたいが値をより具体的な型として保存したい場合は、呼び出し元にその制限を明確にするためObjectに、同じ型にする必要があります。this.Page

于 2013-03-22T16:47:02.160 に答える
-1

式の右側を目的の型にキャストする必要があります。

set{ this.Page = (InterfaceType)value; }

ただし、コードを読むとPage、継承階層で下位の型として定義されている可能性は十分にあります。この場合、キャストは必要ありません:

set { this.Page = value; }
于 2013-03-22T16:40:38.210 に答える