Sorting your example out so it would compile gives:
class A
{
}
class B : A
{
}
class C : B
{
}
...
C objc = new A();
It will still not compile: you will get an error
"Cannot implicitly convert type 'MyClass.A' to 'MyClass.C'. An explicit conversion exists (are you missing a cast?)"
Because C is derived from B, and B is derived from A, each item of type C contains everything that an item of type B does, and B contains everything that class A does. What that means is that an item of class B can hold an instance of Class B
or anything derived from class b. It cannot hold an instance of class A, because class A does not know anything about any additions made to create class B. If the compiler allowed you to set an instance of calss A into a class C reference variable, your program would fail at run time when you tried to use any of the class C features, because the object that the variable was referring to did not contain them.
It's a bit like saying "A textbook (class B) is a type of book (class A), and a Physics textbook (class C) is a type of textbook (class B), so if I buy a book (class A), then it will contain information on Physics, rather than poetry"