Применить свойства к подклассу универсального типа - PullRequest
0 голосов
/ 25 апреля 2018

Вот мой код:

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 в T.ForeColor = Color.Black;:

Ошибка CS011: «T» - этоПараметр типа, который недопустим в данном контексте

Я предполагаю, что я ошибся, пытаясь получить доступ к свойству универсального.

В любом случае, я думаю, это понятночто я пытаюсь сделать здесь, поскольку Form при создании приложения Windows Forms обычно является классом, а не переменной, такой как элементы управления для приложения Form.

Столько, сколько я могу найтиЧтобы обойти это, я хочу знать, возможно ли получить доступ к свойствам T (интересующего меня подкласса формы) и изменить его так, чтобы код в ApplyTo<T>() where T : Form не содержал ошибок для целей обучения.Если это невозможно, это тоже вполне нормально.

1 Ответ

0 голосов
/ 25 апреля 2018

Если вы измените код с

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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...