私はまるでドークのように感じます。私はしばらくの間コーダーをしていて、これまで言語でこれに遭遇したことはありません。私は常にコンストラクターを「追加の」ものでオーバーライドしてきました。そのため、いくつかのクラスを切り捨てています。説明:
public enum Flags : ushort
{
Item = 1,
Player = 2
}
public class Item
{
private Flags _flags;
private int _owner;
private String _pwd;
public Item(Flags flags, int owner, String pwd = null)
{
_owner = owner;
_flags = flags;
_pwd = pwd;
}
}
public class Connection
{
... stuff irrelevant to question
}
Item
ですから、プレイヤーがログインするときに、タイプがあり、接続がある子孫を取得できるようにしたいのですPlayer
。現実的には、それは単なるアイテムです。
だから私はスターターとしてこれをしました:
public class Player : Item
{
public Connection Conn;
}
と言いました:
アイテムには、0個の引数を取るコンストラクターが含まれていません
まあ、私の目には、私はそれを言ったことはありません..プレーヤーは、アイテム、既存のアイテムからコピーされるだけで「作成」されることは決してありません、私はそれに追加します、1つの追加のプロパティ(これは私のコードとして残るものではありません、しかしそれは出発点でした)..したがって、実際の20以上のプロパティを一方から他方に手動でコピーする必要はありません。リアルに使えるようになりたい
Player p = (Player)item_wanted;
次に、接続を割り当てますp Player
。直接作成されることはありません。アイテムはアクティブなプレーヤーのみであり、技術的にはプレーヤーが複数の接続を持つ可能性があるため、アイテムに接続を割り当てたくありません。
もちろん、最初の愚かな考えは
Public Payer(Item i)
{
this = (Player) i;
}
ええ、悲しいことにそれはできませんね。:(しかし、事実上、それはほとんど私が欲しいものです!
あなたが尋ねる前に、私は接続にアイテムを追加することを検討しました...しかし論理的にはあなたはそれをそのように考えることはありません...
それで、どうすればそれを回避できますか?1つのプロパティを追加して、それを別のプロパティと呼びたい...
OK、なぜそれがインストラクターについて言ったのかわかります、それが元のクラスで利用可能なものとうまくいかなかったことに失望しました、しかし大丈夫、私はそれを理解します。ただし、元のアイテムはすでに生きているので、コピーは必要ありません。機能を追加したかったのですが...譲ります。この質問は閉じることができます。**