Aracılığıyla paylaş


Kodunuzda öznitelik bildirimleri veya öznitelik kullanımıyla ilgili hataları ve uyarıları düzeltme

Bu makale aşağıdaki derleyici hatalarını kapsar:

  • CS0181: Öznitelik oluşturucu parametresi geçerli bir öznitelik parametre türü olmayan bir türe sahiptir
  • CS0243: Koşullu öznitelik geçersiz kılma yöntemi olduğundan 'method' üzerinde geçerli değil.
  • CS0404: Öznitelik bu bildirim türünde geçerli değil.
  • CS0415: Bu öznitelik yalnızca açık arabirim üyesi bildirimi olmayan bir dizin oluşturucuda geçerlidir.
  • CS0416: 'tür parametresi': öznitelik bağımsız değişkeni tür parametrelerini kullanamaz.
  • CS0447: Öznitelik tür bağımsız değişkenleriyle kullanılamaz.
  • CS0577: Koşullu öznitelik bir oluşturucu, yıkıcı, işleç, lambda ifadesi veya açık arabirim uygulaması olduğundan geçerli değil.
  • CS0578: Dönüş türü geçersiz olmadığından Koşullu öznitelik 'function' üzerinde geçerli değil.
  • CS0579: Yinelenen öznitelik
  • CS0582: Koşullu öznitelik arabirim üyelerinde geçerli değil.
  • CS0592: Öznitelik bu bildirim türünde geçerli değil. Yalnızca belirli bildirimlerde geçerlidir.
  • CS0609: Geçersiz kılma olarak işaretlenen bir dizin oluşturucuda öznitelik ayarlanamıyor.
  • CS0616: Tür bir öznitelik sınıfı değil
  • CS0625: StructLayout(LayoutKind.Explicit) ile işaretlenmiş türlerdeki örnek alanının FieldOffset özniteliği olmalıdır.
  • CS0629: Koşullu üye 'üye', 'Tür Adı' türündeki 'temel sınıf üyesi' arabirim üyesini uygulayamaz.
  • CS0636: FieldOffset özniteliği yalnızca StructLayout(LayoutKind.Explicit) ile işaretlenmiş türlerin üyelerine yerleştirilebilir.
  • CS0637: Statik veya sabit alanlarda FieldOffset özniteliğine izin verilmez.
  • CS0641: Bu öznitelik yalnızca System.Attribute'tan türetilen sınıflarda geçerlidir.
  • CS0646: Dizin oluşturucu içeren bir tür üzerinde DefaultMember özniteliği belirtilemez.
  • CS0647: Öznitelik yayımlama hatası
  • CS0653: Soyut olduğundan 'class' öznitelik sınıfı uygulanamıyor.
  • CS0657: Konum, bu bildirim için geçerli bir öznitelik konumu değil. Bu bildirim için geçerli öznitelik konumları listelenir. Bu bloktaki tüm öznitelikler yoksayılır.
  • CS0658: Konum tanınan bir öznitelik konumu değil. Bu bildirim için geçerli öznitelik konumları listelenir. Bu bloktaki tüm öznitelikler yoksayılır.
  • CS0668: İki dizin oluşturucunun adları farklı; IndexerName özniteliği bir tür içindeki her dizin oluşturucuda aynı adla kullanılmalıdır
  • CS0685: Koşullu üye 'member' bir out parametresine sahip olamaz.
  • CS0735: TypeForwardedTo özniteliği için bağımsız değişken olarak geçersiz tür belirtildi
  • CS0739: Yinelenen TypeForwardedToAttribute
  • CS1608: C# türlerinde RequiredAttribute özniteliğine izin verilmiyor
  • CS1614: Öznitelik adı belirsiz. '@name' kullanın veya açıkça 'Attribute' sonekini ekleyin.
  • CS1618: Koşullu özniteliği olduğundan veya geçersiz kıldığını bir yöntem olduğundan, yöntemiyle temsilci oluşturulamıyor
  • CS1667: Özellik veya olay erişimcilerinde öznitelik geçerli değil. Yalnızca belirli bildirimlerde geçerlidir.
  • CS1689: Öznitelik yalnızca yöntemler veya öznitelik sınıflarında geçerlidir
  • CS7014: Öznitelikler bu bağlamda geçerli değildir.
  • CS7046: Öznitelik parametresi belirtilmelidir.
  • CS7047: 'parameter1' veya 'parameter2' öznitelik parametresi belirtilmelidir.
  • CS7067: Öznitelik oluşturucu parametresi isteğe bağlıdır, ancak varsayılan parametre değeri belirtilmedi.
  • CS8959: Type1 ile type2 arasındaki standart dönüştürmeler olmadığından CallerArgumentExpressionAttribute uygulanamıyor
  • CS8960: Parametresine uygulanan CallerArgumentExpressionAttribute'un hiçbir etkisi olmaz. CallerLineNumberAttribute tarafından geçersiz kılınmış.
  • CS8961: Parametresine uygulanan CallerArgumentExpressionAttribute'un hiçbir etkisi olmaz. CallerFilePathAttribute tarafından geçersiz kılınmış.
  • CS8962: Parametresine uygulanan CallerArgumentExpressionAttribute'un hiçbir etkisi olmaz. CallerMemberNameAttribute tarafından geçersiz kılındı.
  • CS8963: Parametresine uygulanan CallerArgumentExpressionAttribute'un hiçbir etkisi olmaz. Geçersiz parametre adıyla uygulanır.
  • CS8968: Öznitelik tipi argümanı tür parametrelerini kullanamaz
  • CS8970: Meta verilerde temsil edilemediği için tür bu bağlamda kullanılamaz.
  • CS9331: Öznitelik el ile uygulanamaz.

Öznitelik argümanları ve parametreleri

Öznitelik bağımsız değişkenlerini veya parametrelerini yanlış kullandığınızda aşağıdaki hataları görürsünüz:

  • CS0181: Öznitelik oluşturucu parametresi geçerli bir öznitelik parametre türü olmayan bir türe sahiptir
  • CS0416: 'tür parametresi': öznitelik bağımsız değişkeni tür parametrelerini kullanamaz.
  • CS0447: Öznitelik tür bağımsız değişkenleriyle kullanılamaz.
  • CS0647: Öznitelik yayma hatası
  • CS7046: Öznitelik parametresi belirtilmelidir.
  • CS7047: 'parameter1' veya 'parameter2' öznitelik parametresi belirtilmelidir.
  • CS7067: Öznitelik oluşturucu parametresi isteğe bağlıdır, ancak varsayılan parametre değeri belirtilmedi.
  • CS8968: Bir öznitelik türü argümanı tür parametrelerini kullanamaz
  • CS8970: Meta verilerde temsil edilemediği için tür bu bağlamda kullanılamaz.

Bu hataları düzeltmek için şu kuralları izleyin:

  • Öznitelik oluşturucu parametreleri geçerli öznitelik parametre türlerini (CS0181) kullanmalıdır. C# dil belirtimi, öznitelik parametre türlerini ilkel türler (bool, byte, char, , double, float, int, long, shortve string), object, System.Typesabit listesi türleri ve bu türlerdeki tek boyutlu dizilerle kısıtlar. İşlev işaretçileri ve meta verilerde temsil edilebilen diğer türler geçerli öznitelik parametre türleri değildir.
  • Öznitelik bağımsız değişkenleri derleme zamanı sabit değerleri olmalıdır, bu nedenle tür parametrelerini öznitelik bağımsız değişkenleri (CS0416) olarak kullanamazsınız. Derleyicinin derleme zamanında öznitelik bağımsız değişkenlerini çözümlemesi gerekir ve genel tür oluşturulduğundaya kadar tür parametreleri bilinmez.
  • Tür bağımsız değişkenlerini genel olmayan bir özniteliğe (CS0447) uygulayamazsınız. Öznitelik sınıfı genel değilse, kullanımında köşeli ayraç içinde tür argümanları bulunamaz.
  • Bir öznitelik oluşturucuya geçirilen tüm değerler doğru biçimlendirilmelidir ve her parametre için geçerli aralık içinde olmalıdır (CS0647). Örneğin, bir GuidAttribute geçerli bir GUID biçim dizesi gerektirir.
  • özniteliğini uygularken gerekli tüm öznitelik parametrelerini sağlamanız gerekir (CS7046, CS7047). Hangi parametrelerin zorunlu olduğunu belirlemek için özniteliğin oluşturucu imzasını denetleyin ve her parametre için geçerli bağımsız değişkenler sağlayın.
  • İsteğe bağlı oluşturucu parametreleriyle özel bir öznitelik tanımladığınızda, bu parametreler için varsayılan değerleri (CS7067) belirtin. Çağırıcıların bu bağımsız değişkenleri atlamaları için nitelik kurucusunda parameterType parameterName = defaultValue söz dizimini kullanın.
  • Genel öznitelik türü bağımsız değişkenleri somut türler olmalı, tür parametreleri (CS8968) değil. Derleyicinin derleme zamanında genel öznitelik türü bağımsız değişkenlerini tam olarak belirlemesi gerekir, bu nedenle açık tür parametrelerine izin verilmez.
  • Öznitelik bağımsız değişkenleri olarak kullanılan türler meta verilerde (CS8970) gösterilebilir olmalıdır. dynamic veya belirli küme öğe adları gibi bazı yapılandırılmış türler, meta verilerde kodlanamaz ve öznitelik türü bağımsız değişkenleri olarak kullanılmalarına izin verilmez.

Daha fazla bilgi için özniteliklerle ilgili Öznitelikler, Genel değerler ve C# dil belirtimi bölümüne bakın.

Uyarı

CS0447 ve CS0647 kullanım dışıdır. Geçerli derleyici bu hataları oluşturmaz.

Öznitelik sınıfı gereksinimleri

Gerekli kısıtlamaları karşılamayen öznitelik sınıflarını tanımlarken aşağıdaki hataları görürsünüz:

  • CS0404: Öznitelik bu bildirim türünde geçerli değil.
  • CS0579: Yinelenen öznitelik
  • CS0616: Tür bir öznitelik sınıfı değil
  • CS0641: Bu öznitelik yalnızca System.Attribute'tan türetilen sınıflarda geçerlidir.
  • CS0653: Soyut olduğundan 'class' öznitelik sınıfı uygulanamıyor.
  • CS1614: Öznitelik adı belirsiz. '@name' kullanın veya açıkça 'Öznitelik' sonekini ekleyin.

Bu hataları düzeltmek için şu kuralları izleyin:

  • Öznitelikleri yalnızca özniteliğin AttributeUsageAttribute izin verdiği bildirim türlerine (CS0404) uygulayın. Hangi hedeflerin AttributeTargets geçerli olduğunu görmek için öznitelikte AttributeUsage belirtilen değeri denetleyin.
  • Aynı özniteliği tek bir hedefe birden çok kez uygularsanız, yinelenen öğeyi kaldırın veya özniteliğin AllowMultiple = true (AttributeUsageAttribute) içinde ayarlayın. Varsayılan olarak, öznitelikler her hedefte yalnızca bir kez görünebilir.
  • Öznitelik söz diziminde kullanılan tür System.Attribute (CS0616) öğesinden devralınmalıdır. Yalnızca 'den System.Attribute türetilen sınıflar öznitelik olarak kullanılabilir. Benzer ada sahip diğer türler bile bu hataya neden olur.
  • Yalnızca Attribute sınıflarından türetilmiş olanlara AttributeUsageAttribute uygulayabilirsiniz (CS0641). AttributeUsage özniteliği, diğer özniteliklerin nasıl kullanıldığını denetler ve kendisi öznitelik sınıfları ile sınırlıdır.
  • Öznitelik sınıfları, derleyicinin bunların örneğini oluşturması gerektiğinden (abstract) olamaz. Değiştiriciyi abstract öznitelik sınıfından kaldırın veya soyut temelden somut bir sınıf türetin.
  • Hem Example hem de ExampleAttribute öznitelik sınıfları mevcut olduğunda, derleyici hangisine [Example] atıfta bulunduğunu (CS1614) karar veremez. Belirsizliği gidermek için kısa ad için [@Example], uzun ad için [ExampleAttribute] kullanın.

Daha fazla bilgi için öznitelikler hakkında özel öznitelikler oluşturma ve C# dil belirtimi bölümüne bakın.

Öznitelik yerleşimi bağlamı

Öznitelikleri geçersiz konumlara uyguladığınızda veya yanlış hedef tanımlayıcıları kullandığınızda aşağıdaki hatalar oluşur:

  • CS0592: Öznitelik bu bildirim türünde geçerli değil. Yalnızca belirli bildirimlerde geçerlidir.
  • CS0657: Konum, bu bildirim için geçerli bir öznitelik konumu değil. Bu bildirim için geçerli öznitelik konumları listelenir. Bu bloktaki tüm öznitelikler yoksayılır.
  • CS0658: Konum tanınan bir öznitelik konumu değil. Bu bildirim için geçerli öznitelik konumları listelenir. Bu bloktaki tüm öznitelikler yoksayılır.
  • CS1667: Özellik veya olay erişimcilerinde öznitelik geçerli değil. Yalnızca belirli bildirimlerde geçerlidir.
  • CS7014: Öznitelikler bu bağlamda geçerli değildir.

Bu hataları düzeltmek için bu kuralları izleyin. Daha fazla bilgi için öznitelik belirtiminin Öznitelik Hedefleri ve C# dil belirtimi bölümüne bakın.

  • Her özniteliğin AttributeUsageAttribute hedeflediği bildirim türlerini belirtir. Özniteliği yalnızca bu türlere (CS0592) uygulamanız gerekir. Örneğin, ile AttributeTargets.Interface tanımlanan bir özniteliği bir sınıfa uygulayamazsınız.
  • veya method:gibi property: bir öznitelik hedef tanımlayıcısı kullandığınızda, tanımlayıcının göründüğü bildirim için geçerli olması gerekir (CS0657). Belirli bir bildirim için hangi hedef tanımlayıcılara izin verildiğinden emin olmak için hata iletisini denetleyin.
  • Kullandığınız öznitelik hedef tanımlayıcısı tanınan bir tanımlayıcı değil (CS0658). Geçerli tanımlayıcılar arasında assembly:, , module:type:, method:, property:, , field:, event:, param:ve return:bulunur.
  • ObsoleteAttribute ve CLSCompliantAttribute gibi bazı öznitelikler, özellik veya olay erişimcilerinde (CS1667) geçerli değildir. Niteleyiciyi doğrudan erişimciden özelliğe veya olay bildiriminin kendisine taşıyın.
  • Öznitelikler yalnızca bunları destekleyen program öğelerinde (CS7014) görüntülenebilir. Derleme düzeyi veya modül düzeyi öznitelikleri uyguluyorsanız, assembly: veya module: hedef tanımlayıcılarını kullanarak bunları dosyanın en üstüne yerleştirin.

Önceden tanımlanmış öznitelikler

Önceden tanımlanmış belirli .NET özniteliklerini yanlış kullandığınızda aşağıdaki hatalar oluşur:

  • CS0415: Bu öznitelik yalnızca açık arabirim üyesi bildirimi olmayan bir dizin oluşturucuda geçerlidir.
  • CS0609: Geçersiz kılma olarak işaretlenen bir dizin oluşturucuda öznitelik ayarlanamıyor.
  • CS0625: StructLayout(LayoutKind.Explicit) ile işaretlenmiş türlerdeki örnek alanının FieldOffset özniteliği olmalıdır.
  • CS0636: FieldOffset özniteliği yalnızca StructLayout(LayoutKind.Explicit) ile işaretlenmiş türlerin üyelerine yerleştirilebilir.
  • CS0637: Statik veya sabit alanlarda FieldOffset özniteliğine izin verilmez.
  • CS0646: Dizin oluşturucu içeren bir tür üzerinde DefaultMember özniteliği belirtilemez.
  • CS0668: İki dizin oluşturucunun adları farklı; IndexerName özniteliği bir tür içindeki her dizin oluşturucuda aynı adla kullanılmalıdır
  • CS0735: TypeForwardedTo özniteliği için bağımsız değişken olarak geçersiz tür belirtildi
  • CS0739: Yinelenen TypeForwardedToAttribute
  • CS1608: C# türlerinde RequiredAttribute özniteliğine izin verilmiyor
  • CS9331: Öznitelik el ile uygulanamaz.

Bu hataları düzeltmek için bu kuralları izleyin. Daha fazla bilgi için bkz. Dizin Oluşturucular, Yapı türleri, TypeForwardedToAttribute ve Platform Çağırma (P/Invoke).

  • IndexerNameAttribute yalnızca açık arabirim üyesi bildirimleri (CS0415) olmayan dizin oluşturuculara uygulanabilir. Arabirim dizin oluşturucu adını zaten tanımladığından, açık arabirim dizin oluşturucularından özniteliğini kaldırın.
  • Geçersiz kılma yapılan dizin oluşturucular adlarını temel sınıftan devraldığından, override ile işaretlenen dizin oluşturuculara IndexerName uygulayamazsınız (CS0609). Geçersiz kılma dizin oluşturucusunun IndexerName özniteliğini kaldırın.
  • StructLayout(LayoutKind.Explicit) ile işaretlenmiş bir türdeki her örnek alanının, bir FieldOffsetAttributeCS0625 olması gerekir. Açık düzen, her örnek alanı için bayt uzaklığını belirtmenizi gerektirir.
  • FieldOffsetAttribute yalnızca StructLayoutAttribute'i LayoutKind.Explicit olarak ayarlanmış türlerin üyelerine yerleştirilebilir (CS0636). özniteliğini StructLayout içeren tür bildirimine ekleyin.
  • Açık düzen yalnızca örnek alanlarına uygulandığından veya alanlarında özniteliğine izin verilmez (CS0637). FieldOffset Özniteliği statik veya sabit alandan kaldırın.
  • Derleyici dizin oluşturuculu türler için varsayılan üyeyi otomatik olarak tanımladığından zaten dizin oluşturucu içeren bir türe uygulayamazsınız DefaultMemberAttribute (CS0646). DefaultMember özniteliğini kaldırın.
  • Bir türdeki tüm IndexerNameAttribute öznitelikler aynı adı (CS0668) belirtmelidir. Çalışma zamanı bir türdeki tüm dizin oluşturucular için tek bir ad kullandığından adları eşleşecek şekilde değiştirin.
  • TypeForwardedToAttribute için belirtilen türün, genel olmayan, iç içe olmayan, işaretçi olmayan ve dizi olmayan bir tür olması gerekir (CS0735). Yalnızca en üst düzey adlandırılmış türler geçerli iletme hedefleridir.
  • Bir derleme, her dış tür için yalnızca bir TypeForwardedToAttribute içerebilir (CS0739). Yinelenen TypeForwardedTo bildirimi bulun ve kaldırın.
  • RequiredAttributeAttribute C# (CS1608) içinde tanımlanan türlerde izin verilmez. Bu öznitelik, derleyicileri belirli bir özelliği gerektirmeye zorlaması gereken diğer diller için ayrılmıştır.
  • Bazı öznitelikler derleyici için ayrılmıştır ve kaynak kodunda (CS9331) el ile uygulanamaz. özniteliğini, derleyicinin oluşturmasına neden olan eşdeğer C# dili söz dizimi ile değiştirin.

Koşullu öznitelik kullanımı

aşağıdaki hataları, kullanım kısıtlamalarını ihlal eden yollarla uyguladığınızda ConditionalAttribute görürsünüz:

  • CS0243: Koşullu öznitelik geçersiz kılma yöntemi olduğundan 'method' üzerinde geçerli değil.
  • CS0577: Koşullu öznitelik bir oluşturucu, yıkıcı, işleç, lambda ifadesi veya açık arabirim uygulaması olduğundan geçerli değil.
  • CS0578: Dönüş türü geçersiz olmadığından Koşullu öznitelik 'function' üzerinde geçerli değil.
  • CS0582: Koşullu öznitelik arabirim üyelerinde geçerli değil.
  • CS0629: Koşullu üye 'üye', 'Tür Adı' türündeki 'temel sınıf üyesi' arabirim üyesini uygulayamaz.
  • CS0685: Koşullu üye 'member', bir out parametresine sahip olamaz.
  • CS1618: Bir yöntemin veya onun geçersiz kıldığı bir yöntemin Koşullu özniteliğe sahip olması nedeniyle, yöntemle temsilci oluşturulamıyor
  • CS1689: Öznitelik yalnızca yöntemler veya öznitelik sınıflarında geçerlidir

Bu hataları düzeltmek için bu kuralları izleyin. Daha fazla bilgi için bkz ConditionalAttribute. , Koşullu yöntemler ve Öznitelikler.

  • Derleyici, çağrıları geçersiz kılmaya değil temel yöntem bildirimine bağlar, bu nedenle özniteliği Conditional yöntemlerine (CS0243) uygulayamazsınız. Conditional özniteliğini geçersiz kılma yönteminden kaldırın veya override anahtar sözcüğünü kaldırın.
  • Conditional Özniteliği oluşturucular, sonlandırıcılar, işleçler, lambda ifadeleri veya açık arabirim uygulamalarında (CS0577) geçerli değildir. Türün yaşam döngüsünde veya sözleşmesinde gerekli rollere sahip olduklarından bu üye türleri koşullu olarak atlanamaz.
  • Koşullu yöntemlerin döndürmesi gerekir çünkü derleyici çağrıyı tamamen atlayabilir ve bu durumda çağıran için hiçbir dönüş değeri kullanılabilir olmaz (CS0578). Yöntemin dönüş türünü olarak voiddeğiştirin veya özniteliğini Conditional kaldırın.
  • Tüm arabirim üyelerinin uygulanması gerektiğinden arabirim üyeleri koşullu olamaz (CS0582). Conditional arabirim üyesi bildiriminden özniteliğini kaldırın.
  • Arabirim sözleşmesi tüm derlemelerde (CS0629) bulunmalarını gerektirdiğinden, arabirim üyelerini uygulayan yöntemler koşullu olamaz. Conditional özniteliğini uygulayan yöntemden kaldırın.
  • Koşullu yöntemler, derleyici yöntem çağrısını CS0685 atladığında out parametreleri olamaz çünkü out değişken değeri tanımsız olur. yönteminden out parametreleri kaldırın veya özniteliğini Conditional kaldırın.
  • Koşul simgesinin tanımlanmadığı derlemelerde (CS1618) yöntem bulunmayabileceği için koşullu yönteme başvuran bir temsilci oluşturamazsınız. özniteliğini Conditional yönteminden kaldırın veya temsilci hedefi olarak kullanmayın.
  • Conditional Öznitelik yalnızca yöntemler ve öznitelik sınıflarında (CS1689) geçerlidir. Öznitelik olmayan sınıflar, yapılar veya arabirimler gibi diğer bildirim türlerinde geçerli değildir.

CallerArgumentExpression öznitelik kullanımı

CallerArgumentExpressionAttribute'yi yanlış uyguladığınızda veya diğer çağıran bilgi öznitelikleriyle çakıştığında aşağıdaki hatalar ortaya çıkar:

  • CS8959: Type1 ile type2 arasındaki standart dönüştürmeler olmadığından CallerArgumentExpressionAttribute uygulanamıyor
  • CS8960: Parametresine uygulanan CallerArgumentExpressionAttribute'un hiçbir etkisi olmaz. CallerLineNumberAttribute tarafından geçersiz kılınmış.
  • CS8961: Parametresine uygulanan CallerArgumentExpressionAttribute'un hiçbir etkisi olmaz. CallerFilePathAttribute tarafından geçersiz kılınmış.
  • CS8962: Parametresine uygulanan CallerArgumentExpressionAttribute'un hiçbir etkisi olmaz. CallerMemberNameAttribute tarafından geçersiz kılındı.
  • CS8963: Parametresine uygulanan CallerArgumentExpressionAttribute'un hiçbir etkisi olmaz. Geçersiz parametre adıyla uygulanır.

Bu hataları düzeltmek için bu kuralları izleyin. Daha fazla bilgi için Arayan bilgileri öznitelikleri ve CallerArgumentExpressionAttribute'e bakın.

  • Türü string veya string'den standart bir dönüştürme ile bir tür olmalıdır çünkü öznitelik, çağıranın bağımsız değişken ifadesinin (CS8959) bir string gösterimini ekler. Parametre türünü string veya uyumlu bir türe değiştirin.
  • özniteliğinin CallerArgumentExpression , CallerLineNumberAttributeveya CallerFilePathAttribute (CallerMemberNameAttribute, CS8962) olan bir parametre üzerinde hiçbir etkisi yoktur. Bu çağıran bilgi öznitelikleri önceliklidir, bu nedenle CallerArgumentExpression özniteliğini parametresinden kaldırın.
  • Oluşturucuya geçirilen string bağımsız değişkeni, CallerArgumentExpression, aynı yöntem tanımında başka bir parametrenin adıyla eşleşmelidir (CS8963). Parametre adı yanlış yazılmışsa veya var olmayan bir parametreye başvuruyorsa, özniteliğin hiçbir etkisi yoktur.