DOBON.NET DOBON.NETプログラミング掲示板過去ログ

プロパティの初期化を停止する方法

環境/言語:[C# .NET Framework1.1]
分類:[.NET]

Visual .NET 2003 C#を使用して、
ComboBoxを継承した独自のコントロールを作成しました。

そのコントロールで
uint32型の読み書き可能なプロパティ(Uint32Value)を作成したところ、
それを使用したフォームの
InitializeComponent()に
以下のようなメッセージが挿入されるようになってしまいました。

// TODO: 例外 '無効な Primitive 型 System.UInt32 です。
CLS 準拠の primitive 型のみ使用できます。
CodeObjectCreateExpression を使ってください。' によって
'this.cmbXXX.Uint32Value' のコード生成が失敗しました。

uin32をint32に変えれば、
このようなメッセージは出なくなりそうですが、
扱っているデータがDLLの呼び出し時に使用するuint32値なので、
こんな理由でint32にはしたくありません。

プロパティウィンドウから
Uint32Valueを削除すればうまく行くと思い
[Browsable(false)]
を追加したのですが、
プロパティウィンドウから消えても、
上記のエラーメッセージは消えませんでした。

プロパティを動作時のみ有効なものとして、
デザイン時に無効に設定できればうまく行くと思ったのですが、
その逆しかできないようで。。。。

動作上問題ないのですが、
このメッセージを出なくする方法はないでしょうか?
よろしくお願いします。
アンマネージドな DLL の呼び出しに関係するものを public に配置すべきではありません。できれば private、せいぜい internal にしてください。
また CLS 非準拠なプリミティブ型(大半の符号なし整数型)については、一般には「より大きい型で代用し、set 時に範囲チェックを行う」のが基本的な考え方です(UInt64 は代替する型がないですが)。

一応、CLSCompliant 属性で色々制御できますけど。
Hongliangさん
回答ありがとうございました。

> アンマネージドな DLL の呼び出しに関係するものを public に配置すべきではありません。できれば private、せいぜい internal にしてください。

アドバイスいただいたのに恐縮ですが、
その場合どのような構造にして行けばよいのかが思いつかないです。

DLLはカメラから画像を取得したり、
カメラの設定を変更するためのものです。
コンボボックスで設定値を選ぶと、
カメラの設定が変わります。

DLLの関数をC#のクラスにまとめ、
そのクラスのpublicなメソッドを
コンボボックスのイベントから呼び出しているのですが、
このような構造はよくないのでしょうか?

> また CLS 非準拠なプリミティブ型(大半の符号なし整数型)については、一般には「より大きい型で代用し、set 時に範囲チェックを行う」のが基本的な考え方です(UInt64 は代替する型がないですが)。

とりあえずこの方法で期待した結果を得ることができました。
ありがとうございました。

> 一応、CLSCompliant 属性で色々制御できますけど。

Int64で代替した方がよさそうなので、
そちらで対応することにします。

DOBON.NET | プログラミング道 | プログラミング掲示板