1

ライブラリをモノタッチにバインドしています。モノタッチで起こるのは本当に悪いことなので、スローするプロパティにアクセスしているときにNullReferenceExceptiona をスローすることでそれを防ぎたいと思います。System.InvalidOperationException

メソッドについては、 を使用して[PrologueSnippetAttribute]います。ただし、明らかな理由により、プロパティでは機能しません。プロパティに対して同じ動作をさせるにはどうすればよいですか?

4

2 に答える 2

1

の継承元であるの定義がSnippetAttribute、( generator.cs ) ソース コードと一致しません。PrologueSnippetAttributebtouch

ジェネレーターはメソッドの属性のみを処理し、属性は処理しません (属性が でマークされている場合でもAttributeTargets.Property)。したがって、次のようなことをする必要があります。

[Export ("position")]
PointF Position {
    [PrologueSnippet ("if (!isInitialized) throw new InvalidOperationException ();")]
    get;
    [PrologueSnippet ("if (!isInitialized) throw new InvalidOperationException ();")]
    set;
}

[Internal]これは、プロパティを (バージョンで) 複製するよりも優れています。その理由は、ほとんどの場合、ゲッターとセッターに同じロジックを使用できないためだと思います。

于 2013-03-05T18:51:56.420 に答える
0

もちろん、プロパティ [Internal] をマークして、次のように追加のコードとしてパブリック プロキシを作成することもできます。

ApiDefinition.cs で

...
[Export ("position")]
[Internal]
PointF PositionInt { get; set; }
...

次に、Extra.cs で

...
public PointF Position {
    get {
        if (!isInitialized)
            throw new InvalidOperationException ();
        return PositionInt;
    }
    set {
        if (!isInitialized)
            throw new InvalidOperationException ();
        PositionInt = value
    }
}
...

しかし、より速く、より自動化されたものが良いでしょう

于 2013-02-01T21:34:18.783 に答える