2011-10-20 14 views
31

Olası Çoğalt:
.NET: Determine the type of “this” class in its static methodGetType

nasıl static yönteminden erişilebilir GetType() yapabilir?

Bu soyut temel sınıf

abstract class MyBase 
{ 
    public static void MyMethod() 
    { 
     var myActualType = GetType(); // this is an instance method 
     doSomethingWith(myActualType); 
    } 
} 

ve bu sınıfın bir uygulama var. (Ben birçok uygulamaları olabilir.)

class MyImplementation : MyBase 
{ 
    // stuff 
} 

Nasıl typeof(MyImplementation) olmak myActualType alabilirim?

+3

Bunu basit bir konuda yapabileceğinizi düşünmüyorum. Bir soru olsa da, neden bunu istersiniz? Statik yöntemlerle nokta, koşmak için bir örneğe ihtiyaç duymamasıdır, değil mi? Öyleyse neden madde meselesi? Belki de probleminiz tamamen farklı bir şekilde çözülebilir. – Alxandr

+1

Bir mvc uygulaması için rotaları kaydetmek için bir kolaylık yöntemi yazmaya çalışıyorum - onları ad alanı ile kısıtlamaya çalışıyorum. Özet çünkü başvurunuzun somut uygulamaya sahip olmasını istiyorum. –

+0

O zaman onu statik olarak yazmayın, bunun yerine bir yöntem olarak. Daha sonra türünü GetType() 'yoluyla kolayca alabilirsiniz. – Alxandr

cevap

2

Kullandığım model budur.

abstract class MyBase 
{ 
    public static void MyMethod(Type type) 
    { 
     doSomethingWith(type); 
    } 
} 
35

Statik yöntem içindeki "tip" her zaman belirli bir türdür, çünkü sanal statik yöntem diye bir şey yoktur. Statik olmak MyMethod "türü" yana

var myActualType = typeof(MyBase); 

hepMyBase statik bir yöntemdir: Senin durumunda

, bu sadece yazma anlamına gelir.

+1

Merhaba Reed - Yukarıdaki çözümünüzle ilgili sorunun, alt sınıf türünden bağımsız olarak 'myActualType '' MyBase 'türüne ayarlanacağını düşünüyorum. Asıl soruyu doğru bir şekilde anlarsam, posterin mevcut sınıfın türünü kullanmak için 'MyMethod' yöntemini almayı denediğini düşünüyorum. – matt

+2

@ mjd79: Evet - ama bu benim noktam - statik bir yöntem her zaman taban tipinde yazılacak, çünkü statik bir metot türün bir parçası değil, metodun kullanıldığı sınıf değil ... –

+0

Java 'MyType.class' bir eşdeğer istiyorum, bu sizin için bir cevaptır. –

19

Buna ne dersiniz?

+4

Sınıfı Bar: MyBase 'yapmamı engelleyen nedir? –

+0

Ah, bu mükemmel bir nokta! Sanırım bu işi yapan tek şey sözleşmedir, ama haklısınız, eğer birisi bu şekilde sınıfı ilan ederse, 'MyMethod 'yöntemi beklendiği gibi çalışmayacaktır. – matt

+3

https://msdn.microsoft.com/en-us/library/d5x73970.aspx adresine göre "T: " ifadesini burada yapabiliriz – John

İlgili konular