In Java the file name must be the public class name defined in that java file. Does C# has similar requirement? can I have a A.cs file which only defines a public Class B in
No, in C# you don't have to name your class the same as your file.
Along a similar line, you can have multiple public classes in on file. Java only lets you have one.
This can be helpful for defining a few public enums in one file. Of a few small classes.
It is bad practice however to throw too much into one file.