Belki dinamik desen kullanma? Dinamik anahtar kelimeyi kullanarak herhangi bir yöntemi/mülkü arayabilirsiniz, değil mi? Örneğin, myDynamicObject.DoStuff() yöntemini çağırmadan önce yöntemin var olup olmadığını nasıl kontrol edebilirim?Bir nesnenin belirli bir yönteme/özelliğe sahip olup olmadığı nasıl kontrol edilir?
cevap
yöntemler içindir:
public static bool HasMethod(this object objectToCheck, string methodName)
{
var type = objectToCheck.GetType();
return type.GetMethod(methodName) != null;
}
Düzenleme: hatta bir uzantısı yöntemi yapmak ve bu
gibi kullanabilirsinizmyObject.HasMethod("SomeMethod");
Bunun için herhangi bir dinamik tür kullanmamak ve sınıfınızın bir arabirim oluşturmasına izin vermek daha iyi olmaz mıydı? Daha sonra, bir nesneyi bu arabirimi uygulayıp uygulamadığı ve böylece beklenen yönteme (veya özellik) sahip olduğu, çalışma zamanında kontrol edebilirsiniz.
public interface IMyInterface
{
void Somemethod();
}
IMyInterface x = anyObject as IMyInterface;
if(x != null)
{
x.Somemethod();
}
Bunun tek doğru yol olduğunu düşünüyorum.
Başvuruda bulunduğunuz şey, nesnenin yönteme sahip olduğunu bildiğiniz senaryolarda yararlı olan ördek yazmasıdır, ancak derleyici bunu denetleyemez. Bu, örneğin COM birlikte çalışma senaryolarında kullanışlıdır. (check this article)
Ördek yazmayı örneğin yansımayla birleştirmek istiyorsanız, ördek tipi yazma amacını kaçırdığınızı düşünüyorum.
var property = object.GetType().GetProperty("YourProperty")
property.SetValue(object,some_value,null);
Benzer Yansıma yoluyla
dinamik anahtar kelimesiyle bildirilen bir şey –
Sorun nedir? 'Nesnenin' bir nesne olup olmadığını kontrol edebilirsiniz, örneğin .NET çerçevesi tarafından sağlanan –
aynı şekilde, bir nesnede "Ekle" yönteminin olup olmadığını kontrol etmek istersiniz. Nesne, bir Liste
Sen böyle bir şeyi yazabilirsiniz
Güzel. Uygun tanımlı özelliği elde etmek için GetMethod'u bir döngüde de yapabilirsiniz. – Jnr
Bu eski bir soru, ama ben sadece içine koştum. Bu isimde birden fazla yöntem varsa Type.GetMethod(string name)
bir AmbiguousMatchException fırlatır, bu yüzden daha iyi çantayı
public static bool HasMethod(this object objectToCheck, string methodName)
{
try
{
var type = objectToCheck.GetType();
return type.GetMethod(methodName) != null;
}
catch(AmbiguousMatchException)
{
// ambiguous means there is more than one result,
// which means: a method with that name does exist
return true;
}
}
- 1. Bir nesnenin tanımlanmış olup olmadığı nasıl kontrol edilir?
- 2. Belirli bir yerde musluğun olup olmadığı nasıl kontrol edilir
- 3. Nesnenin belirli bir tür olup olmadığını nasıl kontrol edilir
- 4. Tetikleyicinin geçersiz olup olmadığı nasıl kontrol edilir?
- 5. Oturumun geçersiz olup olmadığı nasıl kontrol edilir
- 6. JSON yanıt öğesinin bir dizi olup olmadığı nasıl kontrol edilir?
- 7. Bir nesnenin derinliği nasıl kontrol edilir?
- 8. Google Drive'da klasörün mevcut olup olmadığı nasıl kontrol edilir?
- 9. Asp.net mvc 3'ün yüklü olup olmadığı nasıl kontrol edilir?
- 10. Nesnenin belirli bir yöntemi olup olmadığını nasıl kontrol edebilirim?
- 11. Swift'de iki setin aynı olup olmadığı nasıl kontrol edilir?
- 12. Soketin hala bağlı olup olmadığı nasıl kontrol edilir?
- 13. Kullanıcının içinde yetkili olup olmadığı nasıl kontrol edilir?
- 14. Dize belirli bir aralıkta olup olmadığını nasıl kontrol edilir. (Java)
- 15. Bir işlemin Windows 7'de yerel C++ kullanılarak yükseltilmiş ayrıcalıklara sahip olup olmadığı nasıl kontrol edilir?
- 16. Belirli bir özelliğe sahip bir nesnenin Ruby dizisinde var olup olmadığını nasıl kontrol edebilirim
- 17. Bir değişkenin bir Moment.js nesnesi olup olmadığı nasıl test edilir?
- 18. Veritabanının URL'sinin geçerli olup olmadığı nasıl kontrol edilir?
- 19. PHP postası() etkin olup olmadığı nasıl kontrol edilir?
- 20. Jinja2 şablonunda verilen değişkenin mevcut olup olmadığı nasıl kontrol edilir?
- 21. jQuery UI widget'ının yüklü olup olmadığı nasıl kontrol edilir?
- 22. Postgresql yedeğinin başarılı olup olmadığı nasıl kontrol edilir?
- 23. Sekmenin etkin olup olmadığı nasıl kontrol edilir JTabbedPane?
- 24. Tarih js kullanılarak tarihin geçerli olup olmadığı nasıl kontrol edilir?
- 25. İki dizenin içeriğinin aynı olup olmadığı nasıl kontrol edilir?
- 26. OS'nin Vista'nın Python'da olup olmadığı nasıl kontrol edilir?
- 27. Cihazla internet bağlantısının olup olmadığı nasıl kontrol edilir: cocos-2d
- 28. Raylar oturumunun yüklü olup olmadığı nasıl kontrol edilir?
- 29. Bir IP adresinin çok bağlantılı bir sistemde yerel ana bilgisayar olup olmadığı nasıl kontrol edilir?
- 30. Bir dosyanın başka bir işlem tarafından açık olup olmadığı nasıl kontrol edilir (Java/Linux)?
* myDynamicObject * türü nedir işlemek? DynamicObject'den türetilen bir sınıf mı? –
nesne, .NET çerçevesi tarafından sağlanan bir nesne olabilir ve bir şey uygulamak için bildiremez miyim? –