簡體   English   中英

是否可以創建具有兩個同名屬性的類型?

[英]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);
    }
}

這將產生帶有單個類和PublicInstance綁定標志的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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM