public T Prop = new Ctor(Method);
private K Method(U controller, V request);
me sale que no puede acceder Method
aquí, porque Method
se requiere para ser static
. ¿Por qué es esto? Prop
no es static
.¿Por qué esto está en contexto estático?
Actualización: Aquí está la firma real:
public DataSource(Func<ControllerBase, AjaxDataTable.Request, Result> dataSelector)
y es así como el método solía ser:
public AjaxDataTable<SourcesViewModel.Source.Channel>.DataSource AjaxData =
new AjaxDataTable<SourcesViewModel.Source.Channel>.DataSource(OnSelectData);
Esto no fue un problema porque no tenía necesidad de referencia this
, así que cuando agregué this
y no compiló más, (el campo no era mío para empezar, alguien más lo había hecho así, así que no me odies por eso). He cambiado a lo siguiente:
private AjaxDataTable<SourcesViewModel.Source.Channel>.DataSource ajaxData;
public AjaxDataTable<SourcesViewModel.Source.Channel>.DataSource AjaxData
{
get
{
if (ajaxData == null)
{
ajaxData =
new AjaxDataTable<SourcesViewModel.Source.Channel>
.DataSource(OnDataSelector);
}
return ajaxData;
}
}
Pero entonces el campo privado ajaxData
siempre sería null
, lo que hace que la tabla de datos se instanciado nuevo cada vez (esto se añade en un diccionario concurrente, lo que provoca un Exception
en una llave duplicada). Quiero saber cómo funciona la asignación a un campo que no hace referencia a this
. ¿Eso crea algo que se reutiliza en todas las instancias de un object
?
¿Por qué está pasando un método como parámetro? ¿Es eso realmente lo que intentas hacer? ¿O solo quieres mostrar que lo estás llamando y usar el resultado en el constructor? – Yuck
Sí, es una expresión lambda. – bevacqua
@abelenky ese es el punto. El compilador me dice que esto es ilegal porque se requiere que 'Method' sea' static'. – bevacqua