Actually that's quite simple, but it is hard to find the correct documentation pages on that:
if(object is GUITexture){
// Do Something
}
This also works with derived classes (up and down). You might also want to check the docs for GetType() and IsSubclassOf(), if you are working with derived classes. But the "is" keyword simplifies things. The actual dynamic cast would be:
GUITexture myTexture=object as GUITexture;
Avoid static casts ( myTexture=(GUITexture)obj ), as they will throw an exception and not compiler errors for derived classes.
EDIT: So, no there is no "real" dynamic typing / duck typing in (Unity-)C#. But with "is" and "as" you are still quite flexible, and the programmer himself can make sure that what he is trying to do is actually allowed (such as, casting from A to B).