C is probably what you will want to end up programming with, but to learn it cold? I do not think it can be done.
Here is what I mean, this is a simple lil C++ section of code:
public class SqlPropertyDescriptor : PropertyDescriptor
{
public static SqlPropertyDescriptor GetProperty(string name, Type sqlType)
{
Type baseType = sqlType.GetProperty("Value").PropertyType;
ArrayList attribs = new ArrayList(TypeDescriptor.GetAttributes(baseType));
Attribute[] attrs = (Attribute[])attribs.ToArray(typeof(Attribute));
return new SqlPropertyDescriptor(name,attrs,sqlType,baseType);
}
private Type SqlType;
private Type BaseType;
protected SqlPropertyDescriptor( string name,Attribute[] attrs,
Type sqlType, Type baseType ) : base(name,attrs)
{
SqlType = sqlType;
BaseType = baseType;
}
...
public override void SetValue(object component,object value)
{
PropertyInfo pi = component.GetType().GetProperty(this.Name);
Object o;
if ( value == DBNull.Value )
{
o = component.GetType().GetField("Null", BindingFlags.Static
| BindingFlags.Public | BindingFlags.GetField).GetValue(component);
}
else
{
o = pi.PropertyType.GetConstructo r(new Type[]{BaseType}).Invoke(
new Object[]{value});
}
pi.SetValue(component,o, null);
}
public override object GetValue(object component)
{
object Property = component.GetType().GetProperty(this.Name).GetValue(
component,null);
if ( (bool)Property.GetType().GetProperty("IsNull").GetValue(Property,
null) )
return DBNull.Value;
return Property.GetType().GetProperty("Value").GetValue(Property,null);
}
}
Here is a simple lil piece of basic:
10 CLEAR 500
20 REM SET I/O AREA TO ENHANCED INSTRUCTION WORK AREA
30 POKE &HFFEF,&H00
40 REM DEFINE STRING & FILENAME FOR "OPEN" FUNCTION
50 A$="TEST.BAS"+CHR$(0): REM STRING MUST BE ZERO TERMINATED
60 REM DEFINE & SAVE ATTRIBUTES TO USE IN OPEN
70 REM CREATE FILE WITH READ & WRITE PERMISSION
80 POKE &HFFE4,&H01: POKE &HFFE5,&H80
90 REM SAVE STRING POINTER, MSB FIRST, LSB SECOND
100 POKE &HFFE2,&H02: POKE &HFFE3,&H41
110 A=VARPTR(A$)+2: POKE &HFFE0,PEEK(A): POKE &HFFE1,PEEK(A+1)
120 REM EXECUTE "OPEN" FUNCTION, IF SUCCESSFUL &HFFE4-&HFFE5 WILL CONTAIN FILE'S CHANNEL NUMBER
130 POKE &HFFEE,&H10: IF PEEK(&HFFEE)<>0 THEN GOTO 250
140 REM DEFINE BUFFER AND LOAD WITH DATA
150 A$="THIS FILE WAS WRITTEN FROM THE COCO EMULATOR"+CHR$(10)+CHR$(13)
160 REM SAVE BUFFER LENGTH
170 POKE &HFFE2,&H00: POKE &HFFE3,LEN(A$)
180 REM SAVE STRING POINTER, MSB FIRST, LSB SECOND
190 A=VARPTR(A$)+2: POKE &HFFE0,PEEK(A): POKE &HFFE1,PEEK(A+1)
200 REM EXECUTE "WRITE" FUNCTION
210 POKE &HFFEE,&H13: IF PEEK(&HFFEE)<>0 THEN GOTO 250
220 REM EXECUTE "CLOSE" FUNCTION
230 POKE &HFFEE,&H11: IF PEEK(&HFFEE)<>0 THEN GOTO 250
240 END
250 REM ERROR
260 PRINT "AN ERROR OCCURED"
270 END
Which do you think a total newbie to programming will be able to figure out, learn and apply?