将属性应用于泛型类型的子类

时间:2018-04-25 00:07:32

标签: 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 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;
        }
    }
}

我在T的{​​{1}}处收到错误说:

  

错误CS011:'T'是一个类型参数,在给定的参数中无效   上下文

我假设我做错了是尝试访问泛型的属性。

无论如何,我认为我在这里要做的很清楚,因为创建Windows窗体应用程序时T.ForeColor = Color.Black;通常是一个类而不是像Form应用程序控件那样的变量。

尽管我可以找到解决这个问题的方法,但我想知道是否可以访问T的属性(Form I感兴趣的子类)并更改它以便{{1}中的代码出于学习目的,没有错误。如果不可能,那也完全没问题。

1 个答案:

答案 0 :(得分:4)

如果您要更改

中的代码
public void ApplyTo<T>() where T : Form
{
    T.ForeColor = Color.Black;
}

public void ApplyTo<T>(T form) where T : Form
{
    form.ForeColor = Color.Black;
}

它应该可以工作,因为你不能访问类本身的属性,只能访问类的对象。

但是,您似乎甚至不需要通用类型 - 您只需使用:

public void ApplyTo(Form form)
{
    form.ForeColor = Color.Black;
}