class MultiCastDemo {
// .
static void ReplaceSpaces(ref string s) {
Console.WriteLine(" ."); s = s.Replace(' ', '-');
}
// .
static void RemoveSpaces(ref string s) { string temp = ""; int i;
Console.WriteLine(" ."); for(i=0; i < s.Length; i++) if(s[i]!= ' ') temp += s[i];
s = temp;
}
// .
static void Reverse(ref string s) { string temp = ""; int i, j;
Console.WriteLine(" ."); for(j=0, i=s.Length-1; i >= 0; i, j++) temp += s[i];
s = temp;
}
static void Main() {
// .
StrMod strOp;
StrMod replaceSp = ReplaceSpaces;
StrMod removeSp = RemoveSpaces;
StrMod reverseStr = Reverse; string str = " .";
// . strOp = replaceSp;
strOp += reverseStr;
// . strOp(ref str);
Console.WriteLine(" : " + str);
Console.WriteLine();
// . strOp -= replaceSp; strOp += removeSp;
str = " ."; //
// . strOp(ref str);
Console.WriteLine(" : " + str);
Console.WriteLine();
}
}
.
.
.
:.--
.
.
:.
Main () . , strOp, , . RemoveSpaces () Reverse (). .
strOp = replaceSp; strOp += reverseStr
strOp replaceSp, += reverseStr. strOp , , .
replaceSp :
strOp -= replaceSp;
removeSp .
strOp += removeSp;
strOp. .
, , . . , , .
|
|
: . , , ,- , . . , , , , . , , , .
, .
// .
Using System;
class X {
Public int Val;
}
// Y, X. class Y: X { }
// X // Y , delegate X ChangeIt(Y obj);
class CoContraVariance {
// X // X , static X IncrA(X obj) {
X temp = new X(); temp.Val = obj.Val + 1; return ■temp;
}
// Y // Y , static Y IncrB(Y obj) {
Y temp = new Y(); temp.Val = obj.Val + 1; return temp;
}
static void Main() {
Y Yob = new Y();
// IncrA X,
// Changelt Y. // .
Changelt change = IncrA;
X Xob = change(Yob);
Console.WriteLine("Xob: " + Xob.Val);
// IncrB Y, // Changelt X. // , change = IncrB;
Yob = (Y) change(Yob);
Console.WriteLine("Yob: " + Yob.Val);
}
}