13

私は現在、部分的なクラスを利用しなければならないシナリオにいます。この部分クラスには、他のクラスのフィールドをアドレス指定する必要のあるメソッドがいくつかあります。

例えば

編集:申し訳ありません:最初のクラスはすでに宣言されていpartialます!

public partial class myClass
{        
    private string _myString;

    public string myString
    {
        get { return _myString; }
        set { _myString = value; }
    }
}

public partial class myClass
{
    public void doSomething()
    {
        myString = "newString";
    }
}

コンパイラはmyString、部分クラスには存在しないと言っています!

どうすればこの問題を克服できますか?

4

5 に答える 5

40

一般的な問題は、異なる名前空間に部分クラスがあることです。名前空間はクラス名の一部であり、namespace1.myClass2namespace.a.myClassつの完全に別個のクラスとして処理されます。

MSDNによると、部分クラスの各部分は次のようになります。

  • partial修飾子を持っている
  • 同じクラス名を持っている
  • 同じ名前空間にある
  • 同じアセンブリまたはDLLに存在する
  • 同じ可視性を持っている(パブリック、プライベートなど)
于 2010-11-09T11:18:52.563 に答える
12

投稿したコードで修正する必要があることがいくつかあります。

C#で部分クラスを使用する場合、クラスのすべての部分を部分クラスとして宣言する必要があります

あなたが持っている:

 public class myClass {}
 public partial class myClass {}

どちらになる必要があります:

public partial class myClass {}
public partial class myClass {}

次に、次のように設定しようとしています。

myString="newString";

しかしmyString、セッターのない公共の財産です。

したがって、次のように宣言するときにセッターを追加しますmyString

public string myString
{
    get{ return _myString; }
    set { _myString = value; }
}

または単に使用します:

_myString="newString";

2番目の部分クラスファイル内。

于 2010-11-09T11:23:51.240 に答える
1

コードをVisualStudioに配置すると、別のエラーが発生しました。

myString = "newString";
Error   Property or indexer 'ConsoleApplication1.Program.myClass.myString' cannot be assigned to -- it is read only

これに変更すると、正常に動作します。

_myString = "newString";

編集:

両方の宮殿でクラスを部分としてマークする必要はありませ。これは正常にコンパイルされます。

    public class myClass
    {

        private string _myString;

        public string myString
        {
            get { return _myString; }
        }
    }


    public partial class myClass
    {

        public void doSomething()
        {
            _myString = "newString";
        }

    }
于 2010-11-09T11:18:27.680 に答える
1

両方の宣言が同じ名前空間を参照していると仮定すると、最初の宣言には部分的なキーワードが含まれていません。

部分キーワードを使用することは、クラス、構造体、またはインターフェースの他の部分を名前空間内で定義できることを示します。すべての部分でpartialキーワードを使用する必要があります。最終的な型を形成するには、コンパイル時にすべてのパーツが使用可能である必要があります。public、privateなど、すべてのパーツのアクセシビリティは同じである必要があります。public、privateなど。

http://msdn.microsoft.com/en-en/library/wa80x488(v=VS.80).aspx

于 2010-11-09T11:18:47.967 に答える
0

partialクラスの1つだけでなく、両方の場所にクラスをマークする必要があります。

于 2010-11-09T11:16:57.743 に答える