-1

C#では、抽象クラスを使用するときに別のクラスをどのようにインスタンス化しますか? foo3 をインスタンス化しようとしています。

意味:

abstract class foo
{
     public string myId {get;set;}
     public string mystring {get;set;}
     public foo3 my3rdFoo {get;set}
}

class foo2 : foo
{
     public string myFavoriteFoo {get;set;}
}

class foo3
{
     public string myName{get;set}         
}

新しい foo2 を正常に作成した後....(コードを追加しませんでした。)

以下のコードを使用して foo3 を呼び出そうとしています:

((foo2)newDoc).foo3.myName = "blah...blah...";

しかし、nullエラーが発生し続けます....ここ...

4

5 に答える 5

3

最初に、抽象クラスを派生させるクラスをインスタンス化する必要があります。この場合は、foo2 です。次に、インスタンス化するオブジェクトに新しいオブジェクトを割り当てます。

var myFoo2 = new foo2();
myFoo2.my3rdFoo = new foo3();

または、オブジェクトのインスタンス化構文を使用:

var myFoo2 = new foo2{
  my3rdFoo = new foo3()
};

または my3rdFoo のインスタンス化を foo2 コンストラクターに追加します。

public foo2(){
  my3rdFoo = new foo3();
}

抽象クラスを直接インスタンス化することはできません。

この後でのみ、サブクラスのプロパティに値を割り当てることができます。また、クラス名は大文字にする必要があります。後で区別しやすくなります。

于 2013-09-19T13:40:03.477 に答える
0
abstract class foo
{
     public string myId {get;set;}
     public string mystring {get;set;}
     public foo3 my3rdFoo {get;set}
}

class foo2 : foo
{
     public string myFavoriteFoo {get;set;}
}

class foo3:foo2
{
     public string myName{get;set}         
}

を使用してインスタンス化

Foo3 myThirdFoo = new foo3();
string result = foo3.myName;

foo2 内から 3 番目の foo にアクセスする場合は、このコードを使用します。

abstract class foo
{
     public string myId {get;set;}
     public string mystring {get;set;}
     public foo3 my3rdFoo {get;set}
}

class foo2 : foo
{
     public foo3 myFavoriteFoo {get;set;}
}

class foo3
{
     public string myName{get;set}         
}

そして、次のように使用します

foo3 ThirdFoo = new foo3();
ThirdFoo.myName = "Something nice";

foo2 SecondFoo = new foo2(){myFavouriteFoo = ThirdFoo};
String Result = SecondFoo.myFavouriteFoo.myName;

さらに別の方法は

 abstract class foo
    {
         public string myId {get;set;}
         public string mystring {get;set;}
         public foo3 my3rdFoo {get;set}
    }

    class foo2 : foo
    {
         public foo3 myFavoriteFoo {get;set;}

         public foo2(string myName)
         {
             foo3 = new foo3();
             foo3.myName = myName;

         }

    }

    class foo3
    {
         public string myName{get;set}         
    }

そして、それを使用してアクセスします

foo2 SecondFoo = new foo2("Something nice");
String Result = SecondFoo.myfavouritefoo.myName;
于 2013-09-19T13:42:57.197 に答える
0

コンストラクターでオブジェクトをインスタンス化するのが好きです。したがって、コードが与えられた場合、基本クラスのデフォルトのコンストラクターでその「foo3」を初期化します。

abstract class foo
{
     public foo() { this.my3rdFoo = new foo3(); }
     public string myId {get;set;}
     public string mystring {get;set;}
     public foo3 my3rdFoo {get;set}
}

class foo2 : foo
{
     public string myFavoriteFoo {get;set;}
}

class foo3
{
     public string myName{get;set}         
}
于 2013-09-19T13:48:33.280 に答える
0

インスタンス化は次のようになります

foo2 newDoc = new foo2();

newDoc.myId = "123";
newDoc.mystring = "Hey";

newDoc.my3rdFoo = new foo3(); //move this to a constructor foo() if you would like
newDoc.my3rdFoo.myName = "blah...blah...";

できません((foo2)newDoc).foo3.myName。代わりに、そうする必要がありますnewDoc.my3rdFoo.myName

foo3はクラスであり、プロパティを設定できるクラスmy3rdFooのインスタンスであるためです。foo3

于 2013-09-19T13:49:03.657 に答える
0

foo3次のコンストラクターでオブジェクトをインスタンス化できますfoo

abstract class foo
{
     public string myId {get;set;}
     public string mystring {get;set;}
     public foo3 my3rdFoo {get;set}
     public foo()
     {
          this.my3rdFoo = new foo3();
     }
}

次のように使用します。

foo newDoc = new foo2();
newDoc.my3rdFoo.myName = "blah...blah...";

また、 C# の規則に一致するように、クラスとプロパティを大文字にすることを検討する必要があります。

于 2013-09-19T13:52:53.040 に答える