14

一部の機能を 2 つのファイルに分割するために部分クラスを使用していますが、エラーが発生します。私は何を間違っていますか?

A1.cs:

private partial class A
{
    private string SomeProperty { get { return "SomeGeneratedString"; } }       
}

A2.cs:

private partial class A
{
    void SomeFunction()
    {
        //trying to access this.SomeProperty produces the following compiler error, at least with C# 2.0
        //error CS0117: 'A' does not contain a definition for 'SomeProperty'
    }
}
4

12 に答える 12

40

2 つの部分クラスは同じ名前空間にありますか? それは説明かもしれません。

于 2008-10-08T21:17:43.347 に答える
5

最初は、エラーを再現できませんでした。

これらの部分クラスが名前空間内で単独で定義されている場合、private キーワードによりビルドが失敗し、「名前空間で定義された要素は、private、protected、または protected internal として明示的に宣言できません」...

それらを非公開にして別のクラスにネストすると、すべて正常に機能します。

あるファイルでクラスの一部が別のクラス内にネストされており、別のファイルでクラスをネストせずにプライベートキーワードを削除した場合にのみ、エラーを再現できます...次のように:

Class1.cs:

namespace stackoverflow.answers
{
    public class Foo
    {
        private partial class Bar
        {
            private string SomeProperty { get { return "SomeGeneratedString"; } }
        }
    }
}

Class2.cs:

namespace stackoverflow.answers
{
    partial class Bar
    {
        void SomeFunction()
        {
            string bar = this.SomeProperty;
        }
    }    
}

名前空間が異なる場合、説明したエラーも発生します。

提供されたコードは無効な C# 構文であり、コンテキストがないと調べることができないため、ソリューションのコード全体を投稿してください。

于 2008-10-08T21:48:35.953 に答える
5

名前空間が違う?

于 2008-10-08T21:18:15.513 に答える
4

編集:

解決策: ビルド アクション -> コンパイル、他には何もありません

私はより具体的にしようとします:

3 つの異なるファイルの 3 つの部分クラス間でクラスを共有しました。ある時点で、(ある部分から、別の部分で宣言された関数の) 関数呼び出しが「現在のコンテキストに存在しません」というエラーを表示し始めました。誤って一部のファイルのビルドアクションを「コンパイル」ではなく「EmbeddedResourse」に設定したことを誰かが理解するのを手伝ってくれるまで、長い時間がかかりました。

ビルド アクションを切り替えるには、ソリューション エクスプローラーでファイルを右クリックし、プロパティを選択します。次に、ビルド アクションを変更します。

この質問は古く、私の答えはまさにこの場合には役に立ちません。しかし、部分クラスに関連するもう 1 つの非常にまれなケースで役立つ場合があります。私の英語がはっきりしていない場合は申し訳ありません。

于 2015-08-05T12:01:55.887 に答える
1

クラスを「プライベート」と宣言しているためだと思います。修飾子を「内部」に変更して、クラスの 2 つの「半分」が同じアセンブリ内で互いに「見える」ようにしてください。

于 2008-10-08T21:21:02.123 に答える
1

私が得るエラーは次のとおりです。

名前空間で定義された要素は、private、protected、または protected internal として明示的に宣言することはできません

前に述べたように、名前空間の問題だと思います。

于 2008-10-08T21:21:52.950 に答える
0

あなたのコードを分析します。部分クラスをネストされたクラスとして宣言したため、エラーが表示されます。bcz 部分クラスがネストされたクラスとして宣言しない理由 parial キーワードは複数のファイルに分割されるため、ネストされたクラスで宣言するとすべてのファイル nae が同じになり、認識されません。

于 2010-10-21T15:13:15.347 に答える
0

単語のケースが異なるだけで、テキスト コンテキスト内の同じ名前空間。実際には、それらを異なるコンパイラ名前空間に配置します。


Oin overflowの場合に注意してください。

ファイル 1:

namespace StackOverflow {
public partial class MyVM

ファイル 2:

namespace Stackoverflow {
public partial class MyVM

過去 10 年間のどこかで、デフォルトのプロジェクト名が元のプロジェクト名とは異なっていたことが判明しましたが、念のためです。うぐ。

于 2021-12-07T22:07:46.187 に答える