Да, Вы можете. Указатель на членскую переменную класса хранится <ударяют> на стеке забастовку> с остальной частью значений структуры, и данные экземпляра класса хранятся на "куче".
Структуры могут также содержать определения классов как участников (внутренние классы).
Вот некоторый действительно бесполезный код, который, по крайней мере, компилирует и работает, чтобы показать, что это возможно:
using System;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
MyStr m = new MyStr();
m.Foo();
MyStr.MyStrInner mi = new MyStr.MyStrInner();
mi.Bar();
Console.ReadLine();
}
}
public class Myclass
{
public int a;
}
struct MyStr
{
Myclass mc;
public void Foo()
{
mc = new Myclass();
mc.a = 1;
}
public class MyStrInner
{
string x = "abc";
public string Bar()
{
return x;
}
}
}
}
Symfony имеет компонент рабочего процесса с 2016, который включает все функции конечного автомата, которые Вы можете вообразить и кажетесь и гибкими и опытными к настоящему времени. Это связано к Symfony, поэтому при использовании Symfony и Doctrine, очень легко интегрироваться (но можно использовать его автономный также). Я также как то, как Вы можете выводить визуальные представления своих рабочих процессов , чтобы показать его людям или обсудить его с командой, и существую много превосходных учебных руководств, доступных онлайн или в реальных цехах.
существует несколько хороших видео на YouTube об обоих конечных автоматах и как Вы используете их с компонентом рабочего процесса, как этот Michelle Sanver или этот Tobias Nyholm .
Однако компонент рабочего процесса действительно принимает много вещей о Вашем конечном автомате и работает лучше всего, если Вы следуете за теми принципами и комбинируете его с другими смежными компонентами (Диспетчер События Symfony и Доктрина). Если Вы используете Доменный Управляемый Дизайн или CQRS или хранилище события, или что-либо совершенствовалось как этот, могло бы иметь смысл просто обрабатывать Ваши собственные состояния. Сначала потяните свой конечный автомат (таким образом, Вы знаете состояния и переходы), и затем реализуйте классы, чтобы обработать изменения или получить доступ к текущему состоянию - сложной вещью о конечных автоматах является логика (о котором необходимо думать заранее так или иначе), не обязательно представление в коде. Получите хорошее схватывание того, как конечные автоматы работают, вдохновляются библиотеками как компонент рабочего процесса Symfony (можно даже моделировать в тех или попробовать его ими сначала), и затем попытайтесь адаптировать его к ситуации и видеть, где самая важная логика конечного автомата и как можно осуществить его.