初学问题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;
}
这一段不是很理解,百度也没找到我能理解的答案,望老哥们能解答一下,谢谢
...全文
181 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,这样才能交换实际的变量
内容简介回到顶部↑这本书不适合C++ 初学者,不适合 Genericity(泛型技术)初学者,或 STL 初学者。这本书也不适合带领你学习面向对象(Object Oriented)技术 — 是的,STL 与面向对象没有太多关连。本书前言清楚说明了书籍的定位和合适的读者,以及各类基础读物。如果你的Generic Programming/STL实力足以阅读本书所呈现的源码,那么,恭喜,你踏上了基度山岛,这儿有一座大宝库等着你。源码之前了无秘密,你将看到vector的实现、list的实现、heap的实现、deque的实现、RB-tree的实现、hash-table的实现、set/map 的实现;你将看到各种算法(排序、搜寻、排列组合、数据移动与复制…)的实现;你甚至将看到底层的memory pool 和高阶抽象的traits 机制的实现。那些数据结构、那些算法、那些重要观念、那些编程实务中最重要最根本的珍宝,那些蜇伏已久彷佛已经还给老师的记忆,将重新在你的脑中闪闪发光。 目录回到顶部↑庖丁解牛(侯捷自序) i 目录 v 前言 xvii 本书定位 xvii 合适的读者 xviii 最佳阅读方式 xviii 我所选择的剖析对象 xix 各章主题 xx 编译工具 xx 中英术语的运用风格 xxi 英文术语采用原则 xxii 版面字形风格 xxiii 源码形式与下载 xxiv 在线服务 xxvi 推荐读物 xxvi 第1章 STL 概论与版本简介001 1.1 STL 概论 001 1.1.1 STL的历史 003 1.1.2 STL与C++ 标准程序库 003 . 1.2 STL 六大组件 - 功能与运用 004 1.3 GNU源码开放精神 007 1.4 HP STL实现版本 009 1.5 P.J. Plauger STL实现版本 010 1.6 Rouge Wave STL实现版本 011 1.7 STLport 实现版本 012 1.8 SGI STL实现版本 总览 013 1.8.1 GNU C++ header 文件分布 014 1.8.2 SGI STL 文件分布与简介 016 STL 标准头文件(无扩展名) 017 C++ 标准规格定案前,HP规范的STL头文件(扩展名 .h) 017 SGI STL 内部文件(SGI STL真正实现于此) 018 1.8.3 SGI STL 的组态设定(configuration) 019 1.9可能令你困惑的C++ 语法 026 1.9.1 stl_config.h 中的各种组态 027 组态3:static template member 027 组态5:class template partial specialization 028 组态6:function template partial order 028 组态7:explicit function template arguments 029 组态8:member templates 029 组态10:default template argument depend on previous template parameters 030 组态11:non-type template parameters 031 组态:bound friend template function 032 组态:class template explicit specialization 034 1.9.2 临时对象的产生与运用 036 1.9.3 静态常数整数成员在class 内部直接初始化 037 in-class static const integral data member initialization 1.9.4 increment/decrement/dereference 运算子 037 1.9.5 "前闭后开"区间表示法 [ ) 039 1.9.6 function call运算子(operator()) 040 第2章 空间配置器(allocator) 043 2.1 空间配置器的标准接口 043 2.1.1 设计一个简单的空间配置器,JJ::allocator 044 2.2 具备次配置力(sub-allocation)的SGI 空间配置器 047 2.2.1 SGI 标准的空间配置器,std::allocator 047 2.2.2 SGI 特殊的空间配置器,std::alloc 049 2.2.3 构造和析构基本工具:construct() 和 destroy() 051 2.2.4 空间的配置与释

110,536

社区成员

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

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

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