是否可以创建具有两个具有相同名称的属性的类型?

问题描述

根据documentation,在以下情况下,const randomBetween = (min,max) => Math.floor(Math.random()*(max-min+1)+min); const color = [ randomBetween(0,255),randomBetween(0,]; console.log(color); document.body.style.background = `rgb(${color[0]},${color[1]},${color[2]})`;会抛出Type.GetProperty(string,BindingFlags)

找到多个具有指定名称和匹配项的属性 指定的绑定约束

我正在寻找一个示例类型,其中会抛出AmbiguousMatchException方法,因为发现多个具有相同名称属性。我创建了一个继承关系(GetProperty),其中两个类都使用A : B定义了相同的命名公共属性(使用new关键字),但是不会抛出异常。

解决方法

在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);
    }
}

这将产生具有单个类的AmbiguousMatchException以及PublicInstance绑定标志。

,

这是一个使用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);
    }
}
,

如果您将与=ABS(YEARFRAC(A1,EOMONTH(A1,12-MONTH(A1)),1)+YEAR(B1)-YEAR(A1)-1+YEARFRAC(B1,EOMONTH(B1,-MONTH(B1)),1))一起玩,则可能会导致模棱两可的比赛。例如,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

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...