Miguel de Icaza c65980d98f Flush hace 23 años
..
Accessibility 783c8b4235 Add a .cvsignore here too. hace 23 años
Cscompmgd cd61fde707 Add cvsignore hace 23 años
I18N 6d8aaad518 2002-11-05 Gonzalo Paniagua Javier <[email protected]> hace 23 años
Microsoft.VisualBasic d653d553dd Adding .cvsignores hace 23 años
Mono.CSharp.Debugger d653d553dd Adding .cvsignores hace 23 años
Mono.Data d6d12b541c Added Description property to Provider hace 23 años
Mono.Data.MySql 5d89243800 2002-11-13 Daniel Morgan <[email protected]> hace 23 años
Mono.Data.PostgreSqlClient 377cde9806 Add some .cvsignore files. hace 23 años
Mono.Data.SqliteClient eb63da16dd 2002-11-16 Tim Coleman <[email protected]> hace 23 años
Mono.Data.SybaseClient 377cde9806 Add some .cvsignore files. hace 23 años
Mono.Data.Tds 377cde9806 Add some .cvsignore files. hace 23 años
Mono.Data.TdsClient caab4e6455 hace 23 años
Mono.Directory.LDAP 9749a97dc5 initial import hace 23 años
Mono.GetOptions 729f838a52 Update hace 23 años
Mono.PEToolkit d653d553dd Adding .cvsignores hace 23 años
System 1778549d07 Updated for building hace 23 años
System.Configuration.Install 9051dae43e fixed System.Configuration.Install and readded to the build hace 23 años
System.Data 61d8042c5d 2002-12-09 Ville Palo <[email protected]> hace 23 años
System.Data.OracleClient 4ce4d96183 2002-12-08 Daniel Morgan <[email protected]> hace 23 años
System.Design 619b396112 2002-12-06 Gaurav Vaish <[email protected]> hace 23 años
System.Drawing 801cb433f1 Added new files to System.Drawing.Design hace 23 años
System.EnterpriseServices 5d09843cd7 Build fixes. hace 23 años
System.Runtime.Remoting d653d553dd Adding .cvsignores hace 23 años
System.Runtime.Serialization.Formatters.Soap d653d553dd Adding .cvsignores hace 23 años
System.Security 17ee63aaa8 2002-11-28 Sebastien Pouliot <[email protected]> hace 23 años
System.ServiceProcess 9155f1f268 Added files: PowerBroadcastStatus.cs, ServiceAccount.cs, hace 23 años
System.Web 983823186e 2002-12-05 Gonzalo Paniagua Javier <[email protected]> hace 23 años
System.Web.Services d653d553dd Adding .cvsignores hace 23 años
System.Windows.Forms c65980d98f Flush hace 23 años
System.XML 063c428a52 2002-12-05 Ville Palo <[email protected]> hace 23 años
corlib 99aaf5ebbc Small placeholder hace 23 años
lib d1e2aa5fdc hace 23 años
notes 25f95f44fc More files hace 24 años
.cvsignore 5f24e03b41 NAnt build files and System.Data files moved to appropriate directory. hace 24 años
ChangeLog bb719876a5 fixed compilation hace 23 años
README 5cc8b22b9f hace 24 años
executable.make 51daeda577 makefile.gnu: Added an install target (which sets permissions and respects hace 23 años
library.build 67546b397f Added Cscompmgd to the build hace 23 años
library.make ca72938859 2002-11-20 Nick Drochak <[email protected]> hace 23 años
makefile dd424c8fec 2002-07-19 Martin Baulig <[email protected]> hace 23 años
makefile.gnu bb719876a5 fixed compilation hace 23 años

README

The class libraries are grouped together in the assemblies they belong.

Each directory here represents an assembly, and inside each directory we
divide the code based on the namespace they implement.

In addition, each assembly directory contains a Test directory that holds the
NUnit tests for that assembly.

The nant build file for an assembly creates two versions of the dll for that
assembly. One version is a "full" dll. The full dll contains (almost) all
of the classes, regardless of how complete the classes are. The name of this
dll is the normal name you would expect, like "corlib.dll" or "System.dll".
These full dll's are created in the /mcs/class/lib directory.

The other dll which is built is a "restricted" dll. The restricted dll
omits incomplete classes that would prevent the NUnit testrunner from actually
running the tests. These restricted dll's are created in the Test directory
of their respective assembly and named with a "_res" suffix. So, for example,
the NUnit-testable dll for corlib is /mcs/class/corlib/Test/corlib_res.dll.

The final dll which is built is the one which houses the actual NUnit tests.
This dll is built from all of the classes in the Test directory and below, and
is named with a "_test" suffix. So, for example, the NUnit tests for corlib
are in /mcs/class/corlib/Test/corlib_test.dll. This dll is also linked with
the restricted dll found in the same directory.


* Missing implementation bits

If you implement a class and you are missing implementation bits,
please use the attribute [MonoTODO]. This attribute can be used
to programatically generate our status web pages:

[MonoTODO]
int MyFunction ()
{
throw new NotImplementedException ();
}

* Tagging buggy code

If there is a bug in your implementation tag the problem by using
the word "FIXME" in the code, together with a description of the
problem.

Do not use XXX or obscure descriptions, because otherwise people
will not be able to understand what you mean.

* Tagging Problematic specs.

If the documentation and the Microsoft implementation do
differ (you wrote a test case to prove this), I suggest that you edit
the file `mcs/class/doc/API-notes' so we can keep track of these problems
and submit our comments to ECMA or Microsoft and seek clarification.

Sometimes the documentation might be buggy, and sometimes the implementation
might be buggy. Lets try to identify and pinpoint which one
is the correct one.

Sometimes the specification will be lame (consider Version.ToString (fieldCount)
where there is no way of knowing how many fields are available, making the API
not only stupid, but leading to unreliable code).

In those cases, use the keyword "LAMESPEC".


* Coding considerations and style.

In order to keep the code consistent, please use the following
conventions. From here on `good' and `bad' are used to attribute
things that would make the coding style match, or not match. It is not
a judgement call on your coding abilities, but more of a style and
look call. Please try to follow these guidelines to ensure prettiness.

Use 8 space tabs for writing your code (hopefully we can keep
this consistent). If you are modifying someone else's code, try
to keep the coding style similar.

Since we are using 8-space tabs, you might want to consider the Linus
Torvals trick to reduce code nesting. Many times in a loop, you will
find yourself doing a test, and if the test is true, you will nest.
Many times this can be changed. Example:


for (i = 0; i < 10; i++) {
if (something (i)) {
do_more ();
}
}

This take precious space, instead write it like this:

for (i = 0; i < 10; i++) {
if (!something (i))
continue;
do_more ();
}

A few guidelines:

* Use a space before an opening parenthesis when calling
functions, or indexing, like this:

method (a);
b [10];

* Do not put a space after the opening parenthesis and the
closing one, ie:

good: method (a); array [10];

bad: method ( a ); array[ 10 ];

* Inside a code block, put the opening brace on the same line
as the statement:

good:
if (a) {
code ();
code ();
}

bad:
if (a)
{
code ();
code ();
}

* Avoid using unecessary open/close braces, vertical space
is usually limited:

good:
if (a)
code ();

bad:
if (a) {
code ();
}

* When defining a method, use the C style for brace placement,
that means, use a new line for the brace, like this:

good:
void Method ()
{
}

bad:
void Method () {
}

* Properties and indexers are an exception, keep the
brace on the same line as the property declaration.
Rationale: this makes it visually
simple to distinguish them.

good:
int Property {
get {
return value;
}
}

bad:
int Property
{
get {
return value;
}
}

Notice how the accessor "get" also keeps its brace on the same
line.

For very small properties, you can compress things:

ok:
int Property {
get { return value; }
set { x = value; }
}

* Use white space in expressions liberally, except in the presence
of parenthesis:

good:

if (a + 5 > method (blah () + 4))

bad:
if (a+5>method(blah()+4))

* For any new files, please use a descriptive introduction, like
this:

//
// System.Comment.cs: Handles comments in System files.
//
// Author:
// Juan Perez ([email protected])
//
// (C) 2002 Address, Inc (http://www.address.com)
//

* If you are modyfing someone else's code, and your contribution
is significant, please add yourself to the Authors list.

* Switch statements have the case at the same indentation as the
switch:

switch (x) {
case 'a':
...
case 'b':
...
}

* Argument names should use the camel casing for
identifiers, like this:

good:
void Method (string myArgument)

bad:
void Method (string lpstrArgument)
void Method (string my_string)

Here are a couple of examples:

class X : Y {

bool Method (int argument_1, int argument_2)
{
if (argument_1 == argument_2)
throw new Exception (Locale.GetText ("They are equal!");

if (argument_1 < argument_2) {
if (argument_1 * 3 > 4)
return true;
else
return false;
}

//
// This sample helps keep your sanity while using 8-spaces for tabs
//
VeryLongIdentifierWhichTakesManyArguments (
Argument1, Argument2, Argument3,
NestedCallHere (
MoreNested));
}

bool MyProperty {
get {
return x;
}

set {
x = value;
}
}

void AnotherMethod ()
{
if ((a + 5) != 4) {
}

while (blah) {
if (a)
continue;
b++;
}
}
}