On 11/9/2014 7:25 PM, AlanThinker wrote:
On Sunday, 9 November 2014 at 10:02:41 UTC, bearophile wrote:
AlanThinker:
If there all classes in one file, the file will be to big.
The file will also probably contain several free functions, and not
just classes.
Bye,
bearophile
Is it possible to let one module contains lots of classes in different
files, and free functions can live in one or several files.
Don't think of a module as directly equivalent to a C# namespace. It is
not. A module is a single file, nothing more. You can use packages to
group modules in multiple namespaces. If you want to have a namespace
foo.gui with a single class per module, then here's a working example of
something you could do:
################
// test/foo/gui/button.d
module foo.gui.button;
class Button
{
public this() {
import std.stdio : writeln;
writeln( "New Button!" );
}
}
// test/foo/gui/widget.d
module foo.gui.widget;
class Widget {
public this() {
import std.stdio : writeln;
writeln( "New Widget!" );
}
}
// test/foo/gui/package.d
module foo.gui;
public import foo.gui.button, foo.gui.widget;
// test/foo/namespace.d
module namespace;
import foo.gui;
void main()
{
auto w = new foo.gui.Widget;
auto b = new foo.gui.Button;
}
###############
cd test
dmd namespace.d foo/gui/package.d foo/gui/widget.d foo/gui/button.d