Aşağıdaki kodum var:C# Derleyici: statik olmayan bir bağlamda statik yönteme erişemiyor
public class Anything
{
public int Data { get; set;}
}
public class MyGenericBase<T>
{
public void InstanceMethod(T data)
{
// do some job
}
public static void StaticMethod(T data)
{
// do some job
}
// others members...
}
public sealed class UsefulController : MyGenericBase<Anything>
{
public void ProxyToStaticMethod()
{
StaticMethod(null);
}
// others non derived members...
}
public class Container
{
public UsefulController B { get; set; }
}
public class Demo
{
public static void Test()
{
var c = new Container();
c.B.InstanceMethod(null); // Works as expected.
c.B.StaticMethod(null); // Doesn't work.
// Static method call on object rather than type.
// How to get the static method on the base type ?
c.B.ProxyToStaticMethod(); // Works as expected.
}
}
Derleyici çok kızgın ... Hata mesajını anlıyorum ama nasıl çözeceğimi bilmiyorum. Statik yöntem çağrımı yapmak için bir nesne yerine bir tür almaya çalışıyordum, ancak bunu doğru şekilde yapmanın bir yolunu bulamıyorum. Üstelik bu, hiç de şık olmayan bir şeyle sonuçlanır.
Temel olarak, GenericBase bir çok statik yöntem ve bazı örnek yöntemleri olan bir çerçeveden bir sınıftır. Denetleyici bu sınıfı yazıyor ve genişletiyor.
Kapsayıcı, bir grup mantıksal ilişkili denetleyicidir.
İlginç bir şey: bu kodun bir Java sürümü doğru şekilde derleniyor, ancak bir uyarı ile. Yürütme de doğru.
Bunu çözmek için bir tasarım deseni var mı?
Girişleriniz için teşekkürler!
Bu problemden kurtulmanın bir yolu buldum, cevaplarınız sayesinde. Çalışıyor gibi görünüyor, ancak bildiğim yan etkilerin olup olmadığını anlayamıyorum.
public class GenericBase<T> : MyGenericBase<T>
{
// Create instance calls here for every base static method.
}
public sealed class UsefulController : GenericBase<Anything>
{
// others non derived members...
}
Çok öğretici, teşekkürler!Aşağıda cevapları okumak, olası bir çözüm hakkında merak ediyorum. Yorum yapmaktan çekinmeyin. –
sonuçta, – BlackTigerX