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;
}
}
我该如何实现这一目标?或任何解决方法?
答案 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