初学问题swap(ref i ,ref)问题

irez 2017-12-16 11:56:59
using System;

namespace Swap演示
{
class Program
{
static void swap<T>(ref T a ,ref T b)
{
T t = a;
a = b;
b = t;
}
static void Main(string[] args)
{
int i = 100, j = 200;
Console.WriteLine("i={0}\tj={1}",i,j);
swap(ref i, ref j);
Console.WriteLine("i={0}\tj={1}", i, j);
}
}
}


这是我在论坛中看到的写法,转换方法
static void swap<T>(ref T a ,ref T b)
{
T t = a;
a = b;
b = t;
}
这一段不是很理解,百度也没找到我能理解的答案,望老哥们能解答一下,谢谢
...全文
182 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq_30335331 2017-12-17
  • 打赏
  • 举报
回复
T 是占位符 你也可以是object 也可以是int等等 不过为了转换成功 一般都是超级父类 比如object 但为什么不写object呢 语法糖呗 那为什么不是E或者是B 如果是的话 你又该问为什么是E,为什么是B了,
threenewbee 2017-12-17
  • 打赏
  • 举报
回复
T是一个泛型类型,之所以用泛型,是这样你写的swap可以交换各种类型的变量。
也可以用int代替,那么程序只能交换int

static void swap(ref int a , ref int b)
{
int t = a;
a = b;
b = t;
}
zhuowp 2017-12-17
  • 打赏
  • 举报
回复
泛型。 c#是强类型语言,通常情况下,你在定义一个方法的时候,参数的类型一定是确定的。比如Swap(ref int a,ref int b)就只能交换两个整数 泛型能够让你在调用方法的时候确定参数的类型。感觉就像,参数类型也被当做一个参数在调用的时候传入了。 泛型可以让方法具有更大的通用性。
irez 2017-12-17
  • 打赏
  • 举报
回复
引用 1 楼 caozhy 的回复:
交换a和b,你的问题是什么,注意这里是ref,这样才能交换实际的变量
我想问的是swap<T>中的这个<T>是什么意思,不好意思哈,没描述清楚问题,我尝试不写<T>的时候会报错,不是很理解
cheng2005 2017-12-17
  • 打赏
  • 举报
回复
引用 5 楼 qq_30335331 的回复:
T 是占位符 你也可以是object 也可以是int等等 不过为了转换成功 一般都是超级父类 比如object 但为什么不写object呢 语法糖呗 那为什么不是E或者是B 如果是的话 你又该问为什么是E,为什么是B了,
就会胡扯,泛型和ojbect能是一个逻辑吗。还扯上语法糖了,不管是泛型和object都和语法糖没什么关系,别在哪看个名字就随便拿过来用。 就拿楼主的例子来说,用pbject和用泛型是绝对不同的含义。
threenewbee 2017-12-17
  • 打赏
  • 举报
回复
引用 6 楼 wddw1986 的回复:
[quote=引用 5 楼 qq_30335331 的回复:] T 是占位符 你也可以是object 也可以是int等等 不过为了转换成功 一般都是超级父类 比如object 但为什么不写object呢 语法糖呗 那为什么不是E或者是B 如果是的话 你又该问为什么是E,为什么是B了,
就会胡扯,泛型和ojbect能是一个逻辑吗。还扯上语法糖了,不管是泛型和object都和语法糖没什么关系,别在哪看个名字就随便拿过来用。 就拿楼主的例子来说,用pbject和用泛型是绝对不同的含义。 [/quote]
threenewbee 2017-12-16
  • 打赏
  • 举报
回复
交换a和b,你的问题是什么,注意这里是ref,这样才能交换实际的变量

110,552

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧