private static Класс[] НайтиКлассы(string очищенныйИсходник)
    {
        string шаблон = @"class\s+URHO3D_API\s+[^{};]+"
                        + @"{"
                        + @"(?:"
                        + @"[^{}]"
                        + @"|(?'BRACKET'{)"
                        + @"|(?'-BRACKET'})"
                        + @")+"
                        + @"(?(BRACKET)(?!))"
                        + @"};";
        MatchCollection соответствия = Regex.Matches(очищенныйИсходник, шаблон, RegexOptions.Singleline);

        Класс[] результат = new Класс[соответствия.Count];
        for (int i = 0; i < результат.Length; i++)
        {
            результат[i] = new Класс(соответствия[i].Value);
        }
        return(результат);
    }
        public void InheritanceTest()
        {
            var masterRoot = new MasterRoot {
                MasterAttr = 234
            };
            var master = new MasterClass {
                MasterAttr2 = true, MasterAttr1 = DateTime.Now, MasterRoot = masterRoot
            };
            var clazz = new MyClass {
                MasterClass = master, Attr1 = "abc", Attr2 = 1
            };
            var derived = new Класс {
                MasterClass = master, Attr1 = "123", Attr2 = 55, Атрибут3 = true
            };
            var detail1 = new DetailClass {
                MyClass = clazz, DetailAttr = "def1"
            };
            var detail2 = new DetailClass {
                MyClass = clazz, DetailAttr = "def2"
            };
            var detailChild = new DetailClass2 {
                DetailClass = detail2, DetailAttr2 = "cbd"
            };
            var objsToUpdate = new DataObject[] { master, clazz, detail1, detail2, derived, masterRoot, detailChild };

            DataService.UpdateObjects(ref objsToUpdate, new DataObjectCache(), true);
            try
            {
                DataService.LoadObject(new MasterRoot {
                    __PrimaryKey = masterRoot.__PrimaryKey
                });
            }
            catch (CantFindDataObjectException)
            {
                Assert.True(false, "Object not saved.");
            }

            try
            {
                DataService.LoadObject(new MasterClass {
                    __PrimaryKey = master.__PrimaryKey
                });
            }
            catch (CantFindDataObjectException)
            {
                Assert.True(false, "Object not saved.");
            }

            try
            {
                DataService.LoadObject(new MyClass {
                    __PrimaryKey = clazz.__PrimaryKey
                });
            }
            catch (CantFindDataObjectException)
            {
                Assert.True(false, "Object not saved.");
            }

            try
            {
                DataService.LoadObject(new Класс {
                    __PrimaryKey = derived.__PrimaryKey
                });
            }
            catch (CantFindDataObjectException)
            {
                Assert.True(false, "Object not saved.");
            }

            try
            {
                DataService.LoadObject(new DetailClass {
                    __PrimaryKey = detail1.__PrimaryKey
                });
            }
            catch (CantFindDataObjectException)
            {
                Assert.True(false, "Object not saved.");
            }

            try
            {
                DataService.LoadObject(new DetailClass {
                    __PrimaryKey = detail2.__PrimaryKey
                });
            }
            catch (CantFindDataObjectException)
            {
                Assert.True(false, "Object not saved.");
            }

            try
            {
                DataService.LoadObject(new DetailClass2 {
                    __PrimaryKey = detailChild.__PrimaryKey
                });
            }
            catch (CantFindDataObjectException)
            {
                Assert.True(false, "Object not saved.");
            }
        }