集合初始化器
2010-11-21 00:28
190 查看
呼呼 终于看到我真正想看的东西了 前面的那些知识是顺带巩固与再理一遍的了 写了几个项目后再回来看看 感觉的确很强烈 很多之前没有重视或者遗忘的东西被我注意到了 再想想 哇 原来可以这么写 我以前要是这么写的话 能就省心好多了哇 之所以对这几天看的东西特别有感觉 是因为我已经学过LinQ 并结合LinQ to Entity写了两个管理系统 可是那时我连泛型都不知道是什么 汗 还有迭代器 会用
却不知道是什么 我个汗啊 现在想想还真是寒啊 就这么差的基础 还去学LinQ 居然还用它给写出东西来了 不过那时的确是碰了很多壁 还被大神给好好鄙视了番 直接导致我立马跑去拍下了这本C#入门经典第四版 现在看看 收获很大.. 希望通过这次返回来打C#基础 我能学得更扎实 我相信它对我的影响是非常大的
代码米注释....都是动物 函数名都是浅显易懂的英文 加注释半天没下得了手..............
Code:
public abstract class Animal
{
protected string name;
public string Name
{
get
{
return name;
}
set
{
name = value;
}
}
public Animal()
{
name = "The animal with no name";
}
public Animal(string newName)
{
name = newName;
}
public void Feed()
{
Console.WriteLine("{0} has been fed.", name);
}
public abstract void MakeANoise();
}
public class Chicken : Animal
{
public Chicken()
{
}
public void LayEgg()
{
Console.WriteLine("{0} has laid an egg.", name);
}
public Chicken(string newName)
: base(newName)
{
}
public override void MakeANoise()
{
Console.WriteLine("{0} says 'cluck!'", name);
}
}
public class Cow : Animal
{
public Cow()
{
}
public void Milk()
{
Console.WriteLine("{0} has been milked.", name);
}
public Cow(string newName)
: base(newName)
{
}
public override void MakeANoise()
{
Console.WriteLine("{0} says 'moo!'", name);
}
}
public class SuperCow : Cow
{
public SuperCow()
{
}
public void Fly()
{
Console.WriteLine("{0} is flying!", name);
}
public SuperCow(string newName)
: base(newName)
{
}
public override void MakeANoise()
{
Console.WriteLine("{0} says 'here I come to save the day!'", name);
}
}
public class Farm<T> :IEnumerable<T> where T : Animal
{
private List<T> animals = new List<T>();
public void Add(T animal)
{
animals.Add(animal);
}
public List<T> Animals
{
get
{
return animals;
}
}
public IEnumerator<T> GetEnumerator()
{
return animals.GetEnumerator();
}
IEnumerator IEnumerable.GetEnumerator()
{
return animals.GetEnumerator();
}
public void MakeNoises()
{
foreach (T animal in animals)
{
animal.MakeANoise();
}
}
public void FeedTheAnimals()
{
foreach (T animal in animals)
{
animal.Feed();
}
}
public Farm<Cow> GetCows()
{
Farm<Cow> cowFarm = new Farm<Cow>();
foreach (T animal in animals)
{
if (animal is Cow)
{
cowFarm.Animals.Add(animal as Cow);
}
}
return cowFarm;
}
}
class Program
{
static void Main(string[] args)
{
Farm<Animal> farm = new Farm<Animal>
{
new Cow{Name="Cow"},
new Chicken{Name="Chicken"},
new Chicken(),
new SuperCow{Name="Chesney"}
};
farm.MakeNoises();
Console.ReadKey();
}
}
唉 实话说 我对这段代码也只是做到勉强理解的程度 让我自己写 我是绝对写不出这么漂亮的代码的 悲叹..
却不知道是什么 我个汗啊 现在想想还真是寒啊 就这么差的基础 还去学LinQ 居然还用它给写出东西来了 不过那时的确是碰了很多壁 还被大神给好好鄙视了番 直接导致我立马跑去拍下了这本C#入门经典第四版 现在看看 收获很大.. 希望通过这次返回来打C#基础 我能学得更扎实 我相信它对我的影响是非常大的
代码米注释....都是动物 函数名都是浅显易懂的英文 加注释半天没下得了手..............
Code:
public abstract class Animal
{
protected string name;
public string Name
{
get
{
return name;
}
set
{
name = value;
}
}
public Animal()
{
name = "The animal with no name";
}
public Animal(string newName)
{
name = newName;
}
public void Feed()
{
Console.WriteLine("{0} has been fed.", name);
}
public abstract void MakeANoise();
}
public class Chicken : Animal
{
public Chicken()
{
}
public void LayEgg()
{
Console.WriteLine("{0} has laid an egg.", name);
}
public Chicken(string newName)
: base(newName)
{
}
public override void MakeANoise()
{
Console.WriteLine("{0} says 'cluck!'", name);
}
}
public class Cow : Animal
{
public Cow()
{
}
public void Milk()
{
Console.WriteLine("{0} has been milked.", name);
}
public Cow(string newName)
: base(newName)
{
}
public override void MakeANoise()
{
Console.WriteLine("{0} says 'moo!'", name);
}
}
public class SuperCow : Cow
{
public SuperCow()
{
}
public void Fly()
{
Console.WriteLine("{0} is flying!", name);
}
public SuperCow(string newName)
: base(newName)
{
}
public override void MakeANoise()
{
Console.WriteLine("{0} says 'here I come to save the day!'", name);
}
}
public class Farm<T> :IEnumerable<T> where T : Animal
{
private List<T> animals = new List<T>();
public void Add(T animal)
{
animals.Add(animal);
}
public List<T> Animals
{
get
{
return animals;
}
}
public IEnumerator<T> GetEnumerator()
{
return animals.GetEnumerator();
}
IEnumerator IEnumerable.GetEnumerator()
{
return animals.GetEnumerator();
}
public void MakeNoises()
{
foreach (T animal in animals)
{
animal.MakeANoise();
}
}
public void FeedTheAnimals()
{
foreach (T animal in animals)
{
animal.Feed();
}
}
public Farm<Cow> GetCows()
{
Farm<Cow> cowFarm = new Farm<Cow>();
foreach (T animal in animals)
{
if (animal is Cow)
{
cowFarm.Animals.Add(animal as Cow);
}
}
return cowFarm;
}
}
class Program
{
static void Main(string[] args)
{
Farm<Animal> farm = new Farm<Animal>
{
new Cow{Name="Cow"},
new Chicken{Name="Chicken"},
new Chicken(),
new SuperCow{Name="Chesney"}
};
farm.MakeNoises();
Console.ReadKey();
}
}
唉 实话说 我对这段代码也只是做到勉强理解的程度 让我自己写 我是绝对写不出这么漂亮的代码的 悲叹..
相关文章推荐
- 谈谈”隐藏类型局部变量、扩展方法、对象与集合初始化器、匿名类型“
- C#中集合和对象初始化器的使用
- 自动属性,匿名类,对象初始化器。集合初始化器,lambda表达式
- C# 3.0语言新特性(语言规范):4 对象和集合初始化器
- 对象初始化器、集合初始化器、自动属性、匿名类型
- C#3.0 中对象初始化器(Object Initializers)和集合初始化器(Collection Initializers)
- C#对象与集合初始化器
- 集合初始化器
- C#3.0 之 自动属性 对象初始化器,集合初始器,扩展方法
- C#3.0 中对象初始化器(Object Initializers)和集合初始化器(Collection Initializers)
- List 对象集合的操作和使用 List 集合对象 对象集合 自动属性 对象初始化 集合初始化器
- C# 3.0新特性初步研究 Part4:使用集合类型初始化器
- 集合,对象初始化器
- 对象与集合初始化器
- C#3.0学习(2)---对象集合初始化器
- 3、步步为营VS 2008 + .NET 3.5(3) - C# 3.0新特性之Automatic Properties(自动属性)、Object Initializers(对象初始化器)、Collection Initializers(集合初始化器)和Extension Methods(扩展方法)
- [C#基础知识]专题十三:全面解析对象集合初始化器、匿名类型和隐式类型
- C#3.0_3-对象和集合初始化器
- C#3.0学习(2)---对象集合初始化器
- CSharp3新特性之三:对象与集合初始化器