ももんがです。
VisualStudio2005、C#でWebサービスを使ってるのですが
Webサービス側のプロジェクトに定義した独自のクラスをWebサービスの戻り値として使い
たいのですが、クライアント側からWeb参照の追加を行うとメンバが消えてしまいます。
独自のクラス
public class TestClass
{
private byte a;
public byte b;
}
クライアントから使うときは、スタブ?クラスができますよね。
それには、独自のクラスにあったprivateのメンバ
が消えてしまいます。
クライアント側のスタブクラス
public partial class TestClass
{
private byte bField;
public byte b {
ゲッターとセッター
}
}
これって、そういうものなのでしょうか。
できれば、独自クラスのメンバの直接アクセスをしないクラスにしたいのです。
最近 C#はじめたものなんですけど
親クラスまたはオーバーライド元クラスに定義されている
privateにはアクセスできなくて当然では無いのでしょうか?
WEBサーバーにあるクラスをクライアント側で利用しようとするなら
なおさら、利用できないと思いますよ
private宣言はクラス内利用はできますけど
たとえ名前が同じでも別の場所で定義されたクラスならできなくて当然と思いますが
利用するためには、public にしなきゃいけないと思います
でもこの回答ですと質問の意に反しますよね
>private byte a;
は
>独自クラスのメンバの直接アクセスをしないクラスにしたいのです。
こうなってますよね
意味が不明なのですが?
独自のクラスの中にゲッターとセッター関数だけをpublicにするだけじゃ
駄目なんでしょうか?
>独自のクラスの中にゲッターとセッター関数だけをpublicにするだけじゃ
>駄目なんでしょうか?
スタブ化されるときのルールがよくわかっていなくて
変な質問してしまいました。
試してみたら
privateのものは、アクセサが追加される。
private+アクセサありのものは、そのままスタブにもある。
なので、アクセサをpublicにしたらたしかにスタブにも現れましたが
スタブ化されるときって
ふつうのpublicメソッドもなくなってしまうのですね。
今回のケースは、アクセサではなく、アクセサ以外の
メソッドでセットされるprivate変数がある場合なのですが
この場合は、
private変数も
そのメソッドもなくなってしまいます。
アクセサもgetしかないと、
スタブ化した場合は、private変数、アクセサともにスタブには
存在しなくなりますね。
スタブクラスは、こういうものだと割り切るしかないのでしょうか。