F # derleyicisi kullanıyorum, bu projede yaşayan bir yöntem bağımsız değişkenini kullandığım için bir proje başvurusu eklemem gerektiğini söyleyen bir hata verir. Ancak bu yöntem özeldir!F # derleyicisi proje başvurusu gerektirir, ancak yöntem özel
Aşağıdaki proje yapıya sahiptir:
Programı -> Kütüphane ->
alt kütüphane bu içeriyor alt kütüphanesinden:
namespace SubLibrary
type Widget = { Value: int }
Kütüphane içeriyor bu:
namespace Library
open SubLibrary
type Banana =
{ Value: int }
member private x.TakeWidget (w: Widget) =()
Programı bu içerir:
open Library
[<EntryPoint>]
let main argv =
printfn "%A" argv
let banana = { Value = 42 }
0
bu hatayı alıyorum:
error FS0074:
The type referenced through 'SubLibrary.Widget' is defined in an assembly that is not referenced.
You must add a reference to assembly 'SubLibrary'
Ama TakeWidget
yöntem özel olduğunu!
Banana
'u bir kayıt yerine bir sınıfa dönüştürmeyi denedim, ancak bu hiçbir fark yaratmadı.
open Library
[<EntryPoint>]
let main argv =
printfn "%A" argv
let banana = CBanana 42
0
:
using SubLibrary;
namespace CLibrary {
public class CBanana {
int m_value;
public CBanana(int value) {
m_value = value;
}
private void TakeWidget(Widget w) {
}
}
}
Sonra
CBanana
yerine
Banana
kullanmak
Programı değiştirdi: Bir deneme olarak
, ben
CLibrary denilen
Kütüphane bir C# sürümünü yarattı Şimdi bir hata alamıyorum. Aslında, C# ile bu yöntemi kamuya açabilirim ve bir çağrıyı derlemeye çalışmadığım sürece hata olmaz.
Derleyici neden SubLibrary'ye bir başvuru eklediğimi ısrar ediyor? Tabii, sadece devam edip sessiz bir hayat için ne yapmam gerektiğini söylerim, ancak SubLibrary, Kitaplığı'un özel bir uygulama detayıdır, bu da Program Programına tabi tutulmamalıdır. - Eğer özel üye taşımak gerekir
type BananaClass (value:int) =
member private x.TakeWidget (w: Widget) =()
member x.Value = value
Siz de bir kayıtla etrafında çalışabilirsiniz: yerine kaydın bir sınıf ile çalıştı
Ayrıca F # 3.1 (VS 2013) kullanıyorum. Eğer Banana bir sınıfsa, kurucuya bir çağrı derleyebilirsiniz, ancak public 'Value' özelliklerine erişmeye çalışırsanız, o zaman hatayı alırsınız. Benim durumumda, içsel olma yöntemine ihtiyacım var, çünkü yansıma kullanılarak keşfedilmesi gerekiyor, bu yüzden isteğe bağlı bir uzantı benim için iyi değil. Cevabın için teşekkürler. – bananasareyellow
Şaşırtıcı olmayan bir şekilde, spec "kamuya açık olmayan tüm varlıkların CLI derlenmiş formu" dahili "dir. – kaefer