aşağıdaki F # kodu tabanı ve soyundan sınıfları beyan gelen aşırı edilmiş bir F # yöntemini çözülemiyor. Temel sınıf, varsayılan bir implementaion ile sanal bir yönteme sahiptir. Alt sınıf, temel sınıf yöntemini geçersiz kılar ve ayrıca yeni bir aşırı yüklenmiş 'Test' yöntemi ekler. Bu kod, iyi derlenmiş ve 'Test' yöntemlerinden birine erişirken sorun oluşturmaz.hem geçersiz kılınmış ve C#
F # Kod:
var result = td.Test(3); <- No overload for method 'Test' takes 1 arguments
tam C# Kod:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Client
{
class Program
{
static void Main(string[] args)
{
var td = new OverrideTest.Descendant();
var result = td.Test(3);
Console.WriteLine(result);
Console.ReadKey();
}
}
}
bir derleme hatası C# sonuçlarından 'Testi' soyundan geçersiz kılmasını yakalamaya çalıştığını Ancak
module OverrideTest
[<AbstractClass>]
type Base() =
abstract member Test : int -> int
default this.Test x = x + 1
type Descendant() =
inherit Base()
override this.Test x = x - 1
member this.Test (x, y) = x - y
,
Tuhaf olan şey, VisualStudio'nun intellisense'in aşırı yüklenmiş iki işlevi görmesi ve her ikisi için de doğru imzalar. Yapı başarısız olmadan önce herhangi bir uyarı veya hata vermez ve sadece çizgiyi daha sonra vurgular.
C# tam bu senaryoyu yeniden hayata geçirdik ve aynı sorun haline çalıştırmak vermedi.
Herkes burada neler olduğunu herhangi bir fikir var mı? veya basitçe Test2(x,y)
adlandırmak - -
Yayımlanan IL'yi her iki dilde mi karşılaştırdınız? – Oded
C# kodunda, yöntemi çağırmadan önce temel sınıfa girdiğinizde ne olur? – Brian
@Brian: Bu işe yarıyor. – Daniel