C# 将属性应用于泛型类型的子类
这是我的密码:C# 将属性应用于泛型类型的子类,c#,winforms,generics,C#,Winforms,Generics,这是我的密码: using System; using System.Drawing; using System.Windows.Forms; namespace HidingMyAppNameHereSoYouCantStealMyIdeas.Classes._Main { public class Theme { private Color ForeColor; private Color BackColor; public
using System;
using System.Drawing;
using System.Windows.Forms;
namespace HidingMyAppNameHereSoYouCantStealMyIdeas.Classes._Main
{
public class Theme
{
private Color ForeColor;
private Color BackColor;
public Theme(Color fore, Color back)
{
ForeColor = fore; BackColor = back;
}
public void ApplyTo<T>() where T : Form
{
T.ForeColor = Color.Black;
}
public void ApplyTo(Control control)
{
control.ForeColor = ForeColor;
control.BackColor = BackColor;
}
}
}
使用系统;
使用系统图;
使用System.Windows.Forms;
命名空间隐藏MyAppNameHeresoyoucantStealMyIdeas.Classes.\u Main
{
公开课主题
{
私人彩色前景色;
私色底色;
公共主题(前彩色、后彩色)
{
前向色=前向;后向色=后向;
}
public void ApplyTo(),其中T:Form
{
T.ForeColor=颜色为黑色;
}
公共无效应用程序(控制)
{
control.ForeColor=前景色;
control.BackColor=背景色;
}
}
}
在T.ForeColor=Color.Black中,我在T
处得到一个错误代码>说:
错误CS011:“T”是一个类型参数,在给定类型中无效
上下文
我假设我做错的是尝试访问泛型的属性
无论如何,我想我在这里要做的很清楚,因为在创建Windows窗体应用程序时,窗体
通常是一个类,而不是像窗体应用程序控件那样的变量
尽管我可能找到了解决这个问题的方法,但我想知道是否有可能访问T(我感兴趣的Form的子类)的属性,并对其进行更改,以使ApplyTo()中的代码(其中T:Form
没有错误)用于学习目的。如果不可能,那也没关系。如果您将代码从
public void ApplyTo<T>() where T : Form
{
T.ForeColor = Color.Black;
}
如果你把代码从
public void ApplyTo<T>() where T : Form
{
T.ForeColor = Color.Black;
}
您无法访问类的属性-您只能访问某些类的对象的属性。在什么情况下您会使用ApplyTo()
?似乎您只需要ApplyTo(Control)
@MetaColon就可以了。在这种情况下,我犯了愚蠢的错误。@JohnWu我想改变表单本身的主题。表单不是控件,而Form1实现表单。我想我有点糊涂了。表单就是控件。具体来说,System.Windows.Forms.Form
继承自System.Windows.Forms.Control
。你只需要一种方法。你根本不需要泛型。你不能访问类的属性-你只能访问某些类的对象的属性。在什么情况下你会使用ApplyTo()
?似乎您只需要ApplyTo(Control)
@MetaColon就可以了。在这种情况下,我犯了愚蠢的错误。@JohnWu我想改变表单本身的主题。表单不是控件,而Form1实现表单。我想我有点糊涂了。表单就是控件。具体来说,System.Windows.Forms.Form
继承自System.Windows.Forms.Control
。你只需要一种方法。您根本不需要泛型。因为表单是控件的一种类型,所以您可以调用ApplyTo(控件)
(在类的下面定义)。ApplyTo(form)
@JohnWu-ok没有明显的目的。我不知道表单是控件。这也是我的错……而且,所有的表单都是从控件之前的表单中派生出来的public void ApplyTo(Form Form){…}
就可以了。因为表单是控件的一种类型,所以可以调用ApplyTo(control)
(在类中定义得更低)。ApplyTo(form)
@JohnWu-ok没有明显的目的。我不知道表单是控件。这也是我的错……而且,所有的表单都是从控件之前的表单中派生出来的<代码>公共无效应用程序(表单){…}
就可以了。
public void ApplyTo(Form form)
{
form.ForeColor = Color.Black;
}