如何将Action <derived>转换为Action <base /> </derived>

时间:2013-05-24 04:33:48

标签: c# delegates as-operator

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;
    }
}

我该如何实现这一目标?或任何解决方法?

1 个答案:

答案 0 :(得分:5)

你不能,这没有意义。

您传递给StartUpMethod的设置操作会输入到Derived,并有权使用SettingsDerived的界面。你不能给它一个基类,并期望它只是处理它。

例如,如果我有......

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

我有权这样做: -

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

但是在方法1中,您试图给它一个SettingsBase s = new SettingsBase();

不会有DerivedSetting