C# 将属性添加到非用户定义的类

C# 将属性添加到非用户定义的类,c#,inheritance,dynamic,polymorphism,C#,Inheritance,Dynamic,Polymorphism,我们一直使用控件,例如按钮,有时我们可能希望向该按钮添加一些自定义属性。例如numberOfTimesClicked等。我目前正在使用GridViewColumnHeader,我想将属性columnIndex添加到该类中。我知道我可以用其他方法跟踪列,但我只是好奇是否可以向类添加额外的属性。例如,我在考虑继承。如果我创建了一个新类并从我想要添加新属性的类(在我的例子中是GridViewColumnHeader)继承,那么我认为应该可以这样做,但由于某些原因,每当我执行以下操作时,我的代码中就会出

我们一直使用控件,例如按钮,有时我们可能希望向该按钮添加一些自定义属性。例如numberOfTimesClicked等。我目前正在使用GridViewColumnHeader,我想将属性columnIndex添加到该类中。我知道我可以用其他方法跟踪列,但我只是好奇是否可以向类添加额外的属性。例如,我在考虑继承。如果我创建了一个新类并从我想要添加新属性的类(在我的例子中是GridViewColumnHeader)继承,那么我认为应该可以这样做,但由于某些原因,每当我执行以下操作时,我的代码中就会出现错误:

private class MyGridViewColumnHeader : GridViewColumnHeader
{
    public int propertyThatIWantToAdd { get; set; }
}

从现在开始,如果我从MyGridViewColumnHeader类而不是GridViewColumnHeader类实例化对象,我会得到错误。使用继承来实现这一点有什么错

您应该将类
设置为public
,而
private
修饰符只允许用于内部类


如果要访问XAML中的属性,也应该使用而不是普通属性。

而不是强制转换
发送方
对象使用

e.OriginalSource as MyGridViewColumnHeader

在那个物体上做你的工作。如果您需要知道
RoutedEventArgs
中的内容,请查看

您会遇到什么样的错误?如果您不说明错误是什么,我们将无能为力…我有一个事件,当用户单击标题列时会触发该事件。如果将发件人对象强制转换为GridViewColumnHeader,则不会出现错误,但如果将其强制转换为MyGridViewColumnHeader,则会出现以下错误:无法将类型为“System.Windows.Controls.GridViewColumnHeader”的对象强制转换为类型为“MyGridViewColumnHeader”。我仍然会遇到错误。我不明白如果MyGridViewColumnHeader继承自GridViewColumnHeader,为什么我不能将GridViewColumnHeader强制转换为MyGridViewColumnHeader。我遇到的一个错误是:无法将类型为“System.Windows.Controls.GridViewColumnHeader”的对象强制转换为类型为“MyGridViewColumnHeader”。@Tom:给我们您真实的、未经处理的原始异常,以便我们知道您有什么错误。。。或者永远保持沉默(作品?)。确切地说,我明白为什么我只会犯一些错误。我可以从某个班到某个班施放,但我不能从某个班到某个班施放。我修改了委托,而不是传递一个someClass参数,我告诉它传递一个MySomeClass参数,现在一切都很好!所以e.OriginalSource原来是someClass,我无法将someClass转换为MySomeClass。这是另一种方式,你是对的,当你说我必须看到什么参数正在通过