1
public class SettingsBase
{

}
public class SettingsDerived : SettingsBase
{

}
public class yyy
{
    public void StartUpMethod(Action<SettingsDerived> settings)
    {
        //something goes here..
        SettingsDerived ds = new SettingsDerived();
        settings(ds);//take out SettingsDerived properties..
        SettingsBase bs = Method1(settings as Action<SettingsBase>);//as operator returns null because settings is not of type Action<SettingsBase>
        //again do something on s based on extracted SettingsDerived

    }

    public SettingsBase Method1(Action<SettingsBase> settings)
    {
        SettingsBase s = new SettingsBase();
        //something goes here
        settings(s);
        return s;
    }
}

どうすればこれを達成できますか? または回避策はありますか?

4

1 に答える 1

6

できません、意味がありません。

渡す設定アクションStartUpMethodは Derived に入力され、 のインターフェイスを使用する権利が与えられます SettingsDerived。次に、それに基本クラスを与えて、それを処理することを期待することはできません。

たとえば、私が持っている場合...

public class SettingsDerived : SettingsBase
{
   public string DerivedSetting { get; set; }
}

私はする権利があります:-

y.StartUpMethod( a => a.DerivedSetting = "blah" );

しかし、method1では、それにSettingsBase s = new SettingsBase();

を持たないDerivedSetting

于 2013-05-24T04:39:06.320 に答える