3

.csファイルを分けておきたいのは、主にそのようにすっきりしていると思うからです。1つの.csファイルにForm.csがあります。私は.NETFramework2.0で作業しています。したがって、いくつかのメソッドを持つ別のmyClass.csファイルがあります。フォームのユーザーがメソッドで呼び出されるWebサービスにアクセスする前に認証を行うようにしたいので、情報を非公開にします。例とチュートリアルで、これは通常同じファイル内で問題がないことを確認しました。ただし、私の目標では、情報をclass.csファイルに含める必要があります。たとえば、myClass.csファイルのクラスを次のようにします(これはまだ大まかなことです)。

    private class SessionData
    {
        private String fTicket;
        private string otherData;

        public SessionData( String ticket, String otherData)
        {
            fTicket = ticket;
            fotherData = otherData;
        }

        public String getTicket{ return fTicket; };
    }

そして、form.csファイルでそれにアクセスします...

    private void LogOn_Click(object sender, EventArgs e)
    {

         myClass sessInfo = new myClass();

         string myTicket = sessInfo.SessionData();
         }
    }

問題は、プライベートであるため、Form.csではアクセスできないことです。これを行うことさえ可能ですか?たくさんの例とヒントを見てきましたが、常に同じファイル内にあります。これはとにかく私の頭の中にある基本的な考え方です。別の方法があれば、私はアドバイスを求めています!

パブリックコンストラクターを作成する必要がありますか?誰かが私に例を示すことができますか?

4

2 に答える 2

5

ネストされたクラスを別のファイル (たとえば 'SessionData.cs') に定義するには、それにアクセスできる部分クラス内にそれをラップするだけです。

public partial class Form1
{
    private class SessionData
    {
        public void getTicket();
    }
}
于 2012-09-26T10:40:10.543 に答える
4

クレデンシャルを情報をブロードキャストしないという意味で「プライベート」のままにする必要があることと、タイプ スコープの意味で OO アクセシビリティの「プライベート」に使用される用語について、混乱があると思います。この 2 つは互換性がなく、完全に別の概念です。

C# 型のアクセシビリティを使用して機密情報を保護しようとするソリューションは無意味であり、間違いなく間違った方法です。ユーザーのログイン時に機密情報を保護する最善の方法について、別の質問をしたいと思います。


古い答え:

SessionDataネストされたクラスだと思いますか?名前空間でプライベート クラスを定義することはできません。

入れ子になったプライベート クラスを定義すると、コンストラクターのアクセシビリティに関係なく、このプライベート クラスを含む型だけがそれを使用できます。

本当に、公開したい場合は、SessionData公開してください。

SessionDataコードがすべて同じアセンブリにある場合は、内部にすることもできます。

internal class SessionData { }

このアセンブリ外のコードは を参照できませんSessionData

于 2012-09-26T10:33:41.057 に答える