C#中引用类型的变量,如果两个引用类型变量指向同一内存,那么对一个引用类型变量的修改也会引起和它指向同一内存的引用类型变量的修改。
这意味着方法参数的类型取决于它是值类型还是引用类型。如果参数是引用类型,那么无需 ref 和 out ,就可以在方法中修改对象的值。
堆,又称为自由存储器
C++中没有引用类型和值类型的区别,虽然C++中有引用。也因此C++中,只有在参数中使用引用关键字 &,才能在方法中修改对象的值。
而且对于类的复制,不会同步的改变原对象和复制对象。
接受数量不定的实参
C++例子
1 int sum(int count, ...) 2 { 3 if(count < = 0) 4 return 0; 5 va_list arg_ptr; // Declare argument list pointer 6 va_start(arg_ptr, count); // Set arg_ptr to 1st optional argument 7 int sum(0); 8 for(int i = 0 ; i < count ; i++) 9 sum += va_arg(arg_ptr, int); // Add int value from arg_ptr and increment 10 va_end(arg_ptr); // Reset the pointer to null 11 return sum; 12 }
1 int main(int argc, char* argv[]) 2 { 3 cout < < sum(6, 2, 4, 6, 8, 10, 12) < < endl; 4 cout < < sum(9, 11, 22, 33, 44, 55, 66, 77, 66, 99) < < endl; 5 return 0; 6 }
C#使用 params 数组
public static int Sum(params int[] paramList) { Console.WriteLine("Using parameter list"); if (paramList == null) { throw new ArgumentException("Util.Sum: null parameter list"); } if (paramList.Length == 0) { throw new ArgumentException("Util.Sum: empty parameter list"); } int sumTotal = 0; foreach (int i in paramList) { sumTotal += i; } return sumTotal; }
1 static void DoWork() 2 { 3 //Console.WriteLine(Util.Sum(10, 9, 8, 7, 6, 5, 4, 3, 2, 1)); 4 Console.WriteLine(Util.Sum(2, 4, 6, 8, 10)); 5 }
C#中假如一个基类和派生类声明了两个具有相同签名的方法,那么在编译应用程序时会显示一条警告消息。派生类中的方法会屏蔽基类中具有相同签名的方法。
C++中只有使用 virtual 关键字才会屏蔽基类相同签名的方法。