[英]Is it possible to create a type with two properties having the same name?
根據文檔, Type.GetProperty(string, BindingFlags)
在以下情況下拋出AmbiguousMatchException
:
找到多個具有指定名稱且與指定綁定約束匹配的屬性
我正在尋找一種示例類型,其中GetProperty
方法將拋出,因為找到了多個具有相同名稱的屬性。 我創建了一個繼承關系( A : B
),其中兩個類都定義了相同的命名公共屬性(使用new
關鍵字), BindingFlags = Public | Instance
BindingFlags = Public | Instance
,但這不會拋出。
在 C# 中,一個類可以實現多個索引器,所有索引器都稱為Item
。
public class Class1
{
public string this[int firstParameter]
{
get { return ""; }
}
public string this[string firstParameter, int secondParameter]
{
get { return ""; }
}
}
然后你可以使用這個產生異常:
class Program
{
static void Main()
{
// This will throw AmbiguousMatchException:
typeof(Class1).GetProperty("Item", BindingFlags.Public | BindingFlags.Instance);
}
}
這將產生帶有單個類和Public
和Instance
綁定標志的AmbiguousMatchException
。
這是一個使用BindingFlags.FlattenHierarchy
的示例,它導致靜態和實例屬性之間的名稱沖突。
public class Program
{
public class A
{
public static string Property { get; set; }
}
public class B : A
{
public string Property { get; set; }
}
public static void Main(string[] args)
{
var type = typeof(B);
var property = type.GetProperty(
"Property",
BindingFlags.Public |
BindingFlags.Static |
BindingFlags.Instance |
BindingFlags.FlattenHierarchy);
}
}
如果您使用BindingFlags
您可能會得到不明確的匹配。 例如BindingFlags.IgnoreCase
允許您獲得此異常,盡管沒有具有相同名稱的屬性:
class MyClass
{
public string MyProperty {get; set;}
public int Myproperty {get; set;}
}
typeof(MyClass).GetProperty("MyProperty", BindingFlags.Public | BindingFlags.Instance | BindingFlags.IgnoreCase)
接下來設置BindingFlags.FlattenHierarchy
會產生上述錯誤:
class MyClass : Base
{
public new string MyProperty { get; set; }
}
class Base
{
public static string MyProperty {get;set;}
}
typeof(MyClass).GetProperty("MyProperty",
BindingFlags.Static | BindingFlags.Instance | BindingFlags.Public | BindingFlags.FlattenHierarchy);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.