C'è un buon modo per una funzione inline di accesso valori privati ??ed interni?

StackOverflow https://stackoverflow.com/questions/4824536

  •  26-10-2019
  •  | 
  •  

Domanda

Ho appena incontrato un problema: quando si tenta di accedere a un valore privato o interno da una funzione inline, ottengo l'errore "Il valore 'xxx' è stato caratterizzato in linea, ma le sue marche di implementazione utilizzo di una funzione interna o privato che non è sufficientemente accessibile". Mentre logica, mi chiedo se qualcuno ha un buon lavoro in giro. La cosa migliore che posso pensare di fare è posto i valori pubblicamente in un modulo nidificato e spero solo nessuno va rovistando (che io non sono troppo preoccupato in ogni caso, dal momento che questi valori sono immutabili). I riflessione supponiamo è un'opzione, ma senza essere chiamate della cache in grado (con ... delegati privati) il calo di prestazioni è troppo.

È stato utile?

Soluzione

Risposta breve:. No, dal momento che il valore sarà inserito in linea nella chiamata in loco, non può utilizzare i valori privati ??e non c'è vero modo di lavorare intorno ad esso

Più rispondere: se non ti dispiace la scrittura incredibilmente brutto codice e si può gestire il sovraccarico di un paio di chiamate di metodo per l'uso, un'alternativa sarebbe quella di creare un'implementazione dinamici (per esempio OperatorIntrinsics.AbsDynamicTableImpl nella libreria di base), che può essere privati. È quindi possibile avvolgere l'attuazione dinamica in un metodo generico opaca pubblico (ad esempio OperatorIntrinsics.AbsDynamic<'T>), e quindi creare un valore in linea che aggiunge i vincoli tipo e rinvia alla realizzazione dinamica (ad esempio let inline abs< ^t when ^t : (static member Abs : ^t -> ^t)> x = AbsDynamic x). Ora, quando si Inline abs basta vedere una chiamata a AbsDynamic ma nessuna delle ulteriori dettagli di implementazione. Nella maggior parte dei casi mi aspetto che questo sia una soluzione molto peggiore di un semplice rendere il vostro valore pubblico, invece di privati.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top