私はいくつかのテストを行っており、何か奇妙なことに遭遇しました。このインターフェースがあるとします
interface IRobot
{
int Fuel { get; }
}
ご覧のとおり、読み取り専用です。だから今、私はそれを実装するクラスを作るつもりです
class FighterBot : IRobot
{
public int Fuel { get; set; }
}
これで、それを読み取って設定できます。それでは、いくつかのテストを行いましょう。
FighterBot fighterBot;
IRobot robot;
IRobot robot2;
int Fuel;
public Form1()
{
InitializeComponent();
fighterBot = new FighterBot();
robot = new FighterBot();
}
最初に私はこれをしました:
Fuel = fighterBot.Fuel;// Can get it
fighterBot.Fuel = 10; //Can set it
それは予想されることです、それから私はこれをしました:
Fuel = robot.Fuel; //Can get it
robot.Fuel = 10; //Doesn't work, is read only
また、期待されること。しかし、私がこれを行うとき:
robot2 = robot as FighterBot;
Fuel = robot2.Fuel; //Can get it
robot2.Fuel = 10;//Doesn't work, is read only
うまくいかないのはなぜですか?robot2をFighterBotとして扱っていませんか?したがって、Fuel を設定できるようにすべきではないでしょうか。