You should treat C# script routine as any other C# routine. After all C#Script is just another assembly.
Thus the answer is:No. Doing so would require the class to span multiple assemblies which is not allowed, and would not be a best practice.
You should create a separate class in the script and interface with it to perform whatever function you purpose. 'foo_string' should be passed to it as an argument in the method or constructor. If it really does not make sense to pass 'foo_string' to the script class, then you might reconsider your implementation design.
That depends on what you are trying to protect against, or what restriction you want to create. For one, access modifiers can be applied to individual classes, but not to namespaces, directly. CS-Script does not currently provide any functionality of its own for this.