对于C#中这两个关键字的用法,常常混淆,有点不清楚,今天又一次看到。遂把它们都记录下来,希望能有所用。这些都是他人写的,我只是搬过来一次,加深印象。

代码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text; namespace dazilianxi.wenjian
{
public class MoTes:IEnumerable<SanWei>
{
private readonly List<SanWei> _motes;
public MoTes()
{
_motes = new List<SanWei>();
} public void Add(double xiong,double yao,double tun)
{
_motes.Add(new SanWei(xiong,yao,tun));
}
#region IEnumerable<SanWei> 成员 public IEnumerator<SanWei> GetEnumerator()
{
//throw new NotImplementedException(); return _motes.GetEnumerator();
} #endregion #region IEnumerable 成员 System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator()
{
// throw new NotImplementedException();
return GetEnumerator();
} #endregion
}
//一定要灵活使用
public struct SanWei
{
public readonly double _Xiong;
public readonly double _Yao;
public readonly double _Tun;
public SanWei(double xiong,double yao,double tun)
{
this._Xiong = xiong;
this._Yao = yao;
this._Tun = tun;
}
} public class Pet
{
public int Age { get; set; }
public static void ChageAge(Pet p)
{
p.Age = ;
} public static void ChangePet(ref Pet p)
{
p = new Pet()
{
Age=
};
}
} public class Player
{
public int Id { get; set; }
public string Name{get;set;}
public string Position { get; set; }
public bool IsbestPlayer { get; set; }
} public class Team
{
public Team()
{
listPlay = new List<Player>();
}
public int Id { get; set; }
public string Name { get; set; }
public int ScoreCount { get; set; }
public List<Player> listPlay { get; set; } /*
out和ref:
● 相同的地方在于:传递的引用
● 不同之处在于:ref在使用之前需要赋上初值,out可以赋初值也可以不赋
*/
//out为了在方法内改变值,然后在外面调用,ref 是作为一个判断条件,在方法里用,也可以发生改变
public static void WhoWinWorldCup(Team a, Team b, out string bestPlayer)
{
if(a.ScoreCount>b.ScoreCount)
{
Console.WriteLine("恭喜{0}对,赢得了这次比赛",a.Name);
}
else
{
Console.WriteLine("恭喜{0}对,赢得了这次比赛",a.Name);
}
bestPlayer=LookForBestPlayer(a,b);
} public static string LookForBestPlayer(Team a ,Team b)
{
string result = string.Empty;
//把Team b的球员合并到Team a中去
a.listPlay.AddRange(b.listPlay);
foreach( var plays in a.listPlay)
{
if(plays.IsbestPlayer==false)
{
continue;
}
else
{
result = plays.Name;
break;
}
}
return result;
}
}
}

main 中

 /* var list = new MoTes()
{
{79, 60, 89},
{82, 63, 90}
};
foreach (var item in list)
{
Console.WriteLine("胸围:{0},腰围:{1},臀围:{2}", item._Xiong, item._Yao, item._Tun);
}
*/
/*
//ref 使用前必须赋值,out不需要
//out必须在方法里赋值,外面赋值不起作用,ref 在里面可以发生变化
//相同点都是取变化值灵活调用 Pet p = new Pet() { Age = 5 };
Console.WriteLine("初始年龄是:{0}", p.Age);
Pet.ChageAge(p);
Console.WriteLine("改变pet的属性值后,年龄是:{0}", p.Age);
Pet.ChangePet(ref p);
Console.WriteLine("改变pet引用地址后,年龄是:{0}", p.Age);
Console.ReadKey();*/ Console.WriteLine("央视足球解说员贺炜:欢迎大家来到本届世界杯的决赛现场~~");
Console.WriteLine("央视足球解说员贺炜:决赛的2支队伍是:"); Team brazil = new Team()
{
Id = ,
Name = "巴西队",
listPlay = new List<Player>()
{
new Player(){Id = , Name = "内马尔", Position = "前锋"},
new Player(){Id = , Name = "阿尔维斯", Position = "后卫"}
}
}; Team germany = new Team()
{
Id = ,
Name = "德国队",
listPlay = new List<Player>()
{
new Player(){Id = , Name = "齐勒", Position = "前锋"},
new Player(){Id = , Name = "拉姆", Position = "后卫"}
}
}; Console.WriteLine("来自南美的{0}主场迎战来自欧洲的劲旅{1}", brazil.Name, germany.Name); Console.WriteLine("在比赛的89分钟,德国队前锋齐勒禁区外抽射死角,锁定胜局~~");
germany.listPlay[].IsbestPlayer = true;
germany.ScoreCount = ;
brazil.ScoreCount = ; string best = string.Empty;
Team.WhoWinWorldCup(brazil, germany, out best);
Console.WriteLine("本场比赛的最佳球员是:{0}", best);
Console.WriteLine();
Console.WriteLine("央视足球解说员贺炜:这是牵动人心的90分钟。在这场比赛之后,总有一支球迷热爱的球队要离开,而这场比赛本身,将成为我们记忆中的永恒财富。等我们老去的时候,在壁炉旁抱着自己的孙子,一定会跟他们讲起2014年,讲起今晚的巴德大战。");
Console.ReadKey();

参考:

http://www.cnblogs.com/darrenji/p/3821313.html

http://www.cnblogs.com/darrenji/p/3822000.html

(C#基础) ref 和out练习的更多相关文章

  1. [C#基础]ref和out的区别

    在C#中通过使用方法来获取返回值时,通常只能得到一个返回值.因此,当一个方法需要返回多个值的时候,就需要用到ref和out,那么这两个方法区别在哪儿呢? MSDN:       ref 关键字使参数按 ...

  2. 10. react 基础 ref 的使用 及 React 16 的生命周期函数 及 生命周期函数使用场景

    一. ref 的使用 ( 直接获取 DOM 元素 ) 在 input 标签上 可以使用 ref 属性 获取当前DOM节点 eg: import React , { Component, Fragmen ...

  3. [C#基础]ref和out的使用

    在C#中如果需要把值类型转换成引用类型传递其他方法中并使其原来值发生改变,使用 ref 和 out 转换成引用类型传递. 1. ref : 使用ref之前需要定义变量并初始化(必须初始) class ...

  4. C#基础-ref、out

    1.默认情况下,C#假定所有的方法参数传递都是传值的. 如下面的方法: public static void Main(string[] args) { int val = 5; //调用AddVal ...

  5. C#基础--Ref与Out区别

    两者都是按地址传递的,使用后都将改变原来参数的数值. class Program { static void Main(string[] args) { int num = 1; Method(ref ...

  6. vue基础 ref的作用

    1.  ref 获取dom元素,除了能获取dom元素也能获取组件dom,   组件通信:        在父组件中直接调用ref定义的组件的数据或者方法 <div id="app&qu ...

  7. [Laravel] 14 - REST API: Laravel from scratch

    前言 一.基础 Ref: Build a REST API with Laravel API resources Goto: [Node.js] 08 - Web Server and REST AP ...

  8. Python :数据结构

    LearnPython :数据结构 .caret, .dropup > .btn > .caret { border-top-color: #000 !important; } .labe ...

  9. Java.Annotations

    Annotation 0. Annotation Tricks http://developer.android.com/reference/java/lang/annotation/Annotati ...

随机推荐

  1. babun安装,整合到cmder

    babun Babun的特性: 预装了Cygwin以及许多的插件 默认的命令行安装工具,没有管理员权限要求. 预装了 pact工具,一个高级的包管理器,类似 apt-get或yum xTerm-256 ...

  2. LightOJ 1229 Treblecross(SG函数打表 + 遍历)题解

    题意:给你一串含“.”和“X”的字串,每次一个玩家可以把‘."变成“X”,谁先弄到三个XXX就赢.假如先手必赢,输出所有能必赢的第一步,否则输出0. 思路:显然如果一个X周围两格有X那么肯定 ...

  3. The destination you provided is not a full refname (i.e., starting with "refs/")

    $ git push v5 v5/hotfix/5.1:hotfix/5.1-quartzerror: The destination you provided is not a full refna ...

  4. UVa 11292 勇者斗恶龙

    https://vjudge.net/problem/UVA-11292 题意:有n条任意个头的恶龙,你希望雇一些其实把它杀死.一个能力值为x的骑士可以砍掉恶龙一个直径不超过x的头,且需要支付x个金币 ...

  5. Python day10 global关键字、函数递归、匿名函数、map函数的用法详解

    1.global关键字 引用全局变量,在局部全局变量改变,也会改变,global相当于指针,将地址指向全局变量的name name='littlepage' def littepage(): glob ...

  6. [粒子特效]osg的自带粒子系统osgParticle::ParticleSystem

    osgParticle示例简单的演示了在osg中使用粒子系统的效果,用到了osgParticle库中的相关类,在osgParticle中主要有: (以下部分材料摘取自osg向场景中添加osgParti ...

  7. spark必知必会的基本概念

    首先我们从宏观的视角来窥视下大数据技术框架: 图1 大数据技术框架 从图1可以看出,数据源-数据收集-数据存储-资源管理,这是我们进行数据分析和处理的基本;图中的计算框架包括批处理.交互式分析和流处理 ...

  8. 筛选datatable

    当从数据库里取出一些数据,然后要对数据进行整合,很容易就会想到: DataTable dt = new DataTable();//假设dt是由"SELECT C1,C2,C3 FROM T ...

  9. WPF操作RichTextBox

    http://www.cnblogs.com/wzwyc/p/6291895.html

  10. android------2018 年初值得关注的 16 个新 Android 库和项目

    1. transitioner Transitioner 是一个为两个拥有嵌入子视图的视图之间提供简便.动态且可调整的动画效果的库.它纯 100% 使用 Kotlin 编写而成,使用 MIT 许可,且 ...