オブジェクトの配列があり、setter関数を使用してそのうちの1つを更新したいと思います。ただし、配列のタイプは親セッター関数を持たないクラス。したがって、次の例のように、配列を正しいクラスに型キャストしました。
class Parent {
}
class Child : Parent {
private int n = 0;
//function specific to Child
public void updateN(int number)
{
n = number
}
}
class Main {
static void main(string[] args)
{
Parent[] a = new Parent[];
a[0] = new Child();
Child c = (Child)a[0];
c.updateN(1);
}
}
さて、下部のコードは配列の子オブジェクトを更新しますか?または、変数に格納されているオブジェクトのみを更新しますか
c
。そうでない場合、配列内のオブジェクトを更新するための最良の方法は何ですか?
回答 2 件
コードにエラーがありましたが、私はあなたが何をしたいのか理解していると思います。以下にソリューションコードを提供しました。確認して試してみて、うまくいくかどうか教えてください。
class Parent { } class Child : Parent { private int n = 0; //function specific to Child public void updateN(int number) { n = number; } } class ChildofChild : Parent { private int n = 0; //function specific to Child } class Main { static void main(string[] args) { Parent[] a = new Parent[10]; a[0] = new Child(); a[1] = new ChildofChild(); if (a[0] is Child) //a[0] is a Child so it will enter in this "if" segment. { Child c = (Child)a[0]; c.updateN(10); } if (a[1] is Child) //a[1] is Not a Child so it will not enter in this "if" segment. { Child c = (Child)a[1]; c.updateN(10); } } }
Mainメソッド内で、Parent配列用に2つの異なるタイプのオブジェクトを作成しました。コードを少し安全にするために、「if(a [1] is Child)」条件を使用しました。私の見解では、どのクラスに「updateN」メソッドが含まれているかがわかっている場合は、そのクラスをその「if」条件セグメントに追加し、適切なキャストを使用して目的の値を更新できます。
関連記事
- Typescriptの別のオブジェクトのキーでオブジェクトを更新するにはどうすればよいですか?
- setStateでオブジェクトを更新すると、なぜ無限ループが発生するのですか?
- setStateを使用してreactjsのオブジェクトの特定のプロパティを更新できません
- 状態のオブジェクト配列を毎秒更新する方法は?
- MongoDB:ドキュメントの配列内のオブジェクトを更新します
- 生成されたオブジェクトが更新されない
- SwiftUIビューが環境オブジェクトに更新されない
- MayaPythonでオブジェクト名を更新する際の問題
- 配列にネストされた別のオブジェクトのデータでオブジェクトを更新するにはどうすればよいですか?
簡単な答え:はい、配列内のオブジェクトが更新されます
詳細:
クラス変数は、実際にはC#のポインターです。したがって、コード内で配列からのポインタがコピーされ、「updateN」が呼び出されます。実際のオブジェクトはコピーされなかったため、メソッドは配列内の同じオブジェクトで呼び出されます。