APISampleUnitTestsCS.FAQ.GetBaseTypesAndOverridingRelationships C# (CSharp) Метод

GetBaseTypesAndOverridingRelationships() приватный Метод

private GetBaseTypesAndOverridingRelationships ( ) : void
Результат void
        public void GetBaseTypesAndOverridingRelationships()
        {
            var tree = SyntaxTree.ParseText(@"
            using System;
            abstract class C1
            {
            public virtual int F1(short s) { return 0; }
            public abstract int P1 { get; set; }
            }
            abstract class C2 : C1
            {
            public new virtual int F1(short s) { return 1; }
            }
            class C3 : C2
            {
            public override sealed int F1(short s) { return 2; }
            public override int P1 { get; set; }
            }");
            var mscorlib = MetadataReference.CreateAssemblyReference("mscorlib");
            var compilation = Compilation.Create("MyCompilation",
                options: new CompilationOptions(OutputKind.DynamicallyLinkedLibrary),
                syntaxTrees: new[] { tree }, references: new[] { mscorlib });

            // Get TypeSymbols for types C1, C2 and C3 above.
            TypeSymbol typeC1 = compilation.GetTypeByMetadataName("C1");
            TypeSymbol typeC2 = compilation.GetTypeByMetadataName("C2");
            TypeSymbol typeC3 = compilation.GetTypeByMetadataName("C3");
            TypeSymbol typeObject = compilation.GetSpecialType(SpecialType.System_Object);

            Assert.IsTrue(typeC1.IsAbstract);
            Assert.IsTrue(typeC2.IsAbstract);
            Assert.IsFalse(typeC3.IsAbstract);

            // Get TypeSymbols for base types of C1, C2 and C3 above.
            Assert.IsTrue(typeC1.BaseType.Equals(typeObject));
            Assert.IsTrue(typeC2.BaseType.Equals(typeC1));
            Assert.IsTrue(typeC3.BaseType.Equals(typeC2));

            // Get MethodSymbols for methods named F1 in types C1, C2 and C3 above.
            var methodC1F1 = (MethodSymbol)typeC1.GetMembers("F1").Single();
            var methodC2F1 = (MethodSymbol)typeC2.GetMembers("F1").Single();
            var methodC3F1 = (MethodSymbol)typeC3.GetMembers("F1").Single();

            // Get overriding relationships between above MethodSymbols.
            Assert.IsTrue(methodC1F1.IsVirtual);
            Assert.IsTrue(methodC2F1.IsVirtual);
            Assert.IsFalse(methodC2F1.IsOverride);
            Assert.IsTrue(methodC3F1.IsOverride);
            Assert.IsTrue(methodC3F1.IsSealed);
            Assert.IsTrue(methodC3F1.OverriddenMethod.Equals(methodC2F1));
            Assert.IsFalse(methodC3F1.OverriddenMethod.Equals(methodC1F1));

            // Get PropertySymbols for properties named P1 in types C1 and C3 above.
            var propertyC1P1 = (PropertySymbol)typeC1.GetMembers("P1").Single();
            var propertyC3P1 = (PropertySymbol)typeC3.GetMembers("P1").Single();

            // Get overriding relationships between above PropertySymbols.
            Assert.IsTrue(propertyC1P1.IsAbstract);
            Assert.IsFalse(propertyC1P1.IsVirtual);
            Assert.IsTrue(propertyC3P1.IsOverride);
            Assert.IsTrue(propertyC3P1.OverriddenProperty.Equals(propertyC1P1));
        }