SizeOf and Length do something completely different things. SizeOf gives you the size of the object you have. A string for example is nothing more than a pointer, therefore it's size is 4 or 8 bytes. Length gives you information that this object contains. For the string this means reading a value from the data the pointer points to.
There is no unified interface for these two operations, because they are completely different. Take this example:
TTest = record
A: Integer;
B: String;
C: Float;
end;
The "total" size of that record would be sizeOf(TTest) + Length(test.B). While the size of the object is trivial to get, computing the total size, like with using length, requires knowledge about the type. This is exactly what generics are not supposed to do, the idea behind generics is that you don't need to know details about the type.
May I ask what you want to do, maybe there is some other way