For example, the fully qualified name of the C# string type is System.String. Contrast this with the assembly-qualified name, which is the full name plus the assembly, provided by the AssemblyQualifiedName property.
If the current Type represents a generic type, the type arguments in the string returned by FullName are qualified by their assembly, version, and so on, even though the string representation of the generic type itself is not qualified by assembly. Thus, concatenating t.FullName + ", " + t.Assembly.FullName produces a result that is equivalent to t.AssemblyQualifiedName, as is the case with types that are not generic.
If the current Type represents a type parameter of a generic type, or an array type, pointer type, or byref type based on a type parameter, this property returns nullNothingnullptra null reference (Nothing in Visual Basic).
If the current type contains generic type parameters that have not been replaced by specific types (that is, the ContainsGenericParameters property returns true), but the type is not a generic type definition (that is, the IsGenericTypeDefinition property returns false), this property returns nullNothingnullptra null reference (Nothing in Visual Basic). For example, consider the classes Base and Derived in the following code.
Public Class Base(Of TBase)
End Class
Public Class Derived(Of TDerived)
Inherits Base(Of TDerived)
End Class
public class Base<TBase> { }
public class Derived<TDerived> : Base<TDerived> { }
generic<typename TBase>
public ref class Base { };
generic<typename TDerived>
public ref class Derived : Base<TDerived> { };
If you use the BaseType property to obtain the base type of Derived, the FullName property of the resulting Type object returns nullNothingnullptra null reference (Nothing in Visual Basic). To get a non-null FullName, you can use the GetGenericTypeDefinition method to get the generic type definition.
This property is read-only.