using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;namespace QueryComplexObject
{
class Customer
{
public string ID { get; set; }
public string City { get; set; }
public string Country{ get; set; }
public string Region { get; set; }
public decimal Sales { get; set; }
public override string ToString()
{
return "ID:" + ID+" " + "City:" + City+" " + "Country:" + Country+" " + "Region:" + Region +" "+ "Sales:" + Sales;
}
} class Program
{
static void Main(string[] args)
{
List<Customer> customers = new List<Customer>
{
new Customer { ID = "A", City = "New YorK", Country = "USA", Region = "North USA", Sales = 9999},
new Customer { ID = "B", City = "MMubLik", Country = "India", Region = "Asia",Sales= 8888},
new Customer { ID = "C", City = "sdfasf", Country = "UK", Region = "PPa",Sales= 7777},
new Customer { ID = "D", City = "Mfdg", Country = "Dekl", Region = "Qcia",Sales= 6666},
new Customer { ID = "E", City = "MhjO", Country = "Dkka", Region = "Aivr",Sales= 5555},
new Customer { ID = "F", City = "ghjONO", Country = "Pool", Region = "Sdia",Sales= 4444},
new Customer { ID = "G", City = "cvNO", Country = "Ekkiv", Region = "Parti",Sales= 3333},
new Customer { ID = "H", City = "Palu", Country = "CllKu", Region = "Lric",Sales= 2222},
new Customer { ID = "I", City = "Mosco", Country = "Drro", Region = "Ytile",Sales= 1111},
new Customer { ID = "G", City = "Seml", Country = "Swrit", Region = "Hikru",Sales= 1000},
new Customer { ID = "K", City = "Mdsf", Country = "Adfin", Region = "Sxia",Sales= 2000},
new Customer { ID = "L", City = "istan", Country = "Cink", Region = "Nikal",Sales= 3000},
new Customer { ID = "M", City = "Shanghai", Country = "Asdsd", Region = "Lusia",Sales= 4000},
new Customer { ID = "N", City = "Wuhai", Country = "Gfgf", Region = "Srima",Sales= 5000},
new Customer { ID = "O", City = "Dalian", Country = "Efhj", Region = "Vgen",Sales= 6000},
new Customer { ID = "P", City = "Mexige", Country = "Bddfg", Region = "Waga",Sales= 7000},
new Customer { ID = "Q", City = "LLucy", Country = "Ehjgh", Region = "Ericsi",Sales= 8000},
new Customer { ID = "R", City = "London", Country = "Ffghfg", Region = "Fulli",Sales=9000},
new Customer { ID = "S", City = "Bejing", Country = "Cdsfdf", Region = "Jicci",Sales= 1001},
new Customer { ID = "T", City = "Limas", Country = "IOll", Region = "Malli",Sales= 2000}, };
var queryResult = from c in customers where c.Region == "Asia" select c;
Console.WriteLine("Customers in Asic");
foreach (Customer cs in queryResult)
{
Console.WriteLine(cs);
}
Console.WriteLine("press anykey to go out");
Console.ReadKey(); }
}
}
首先是那个重写的方法ToString(),我怎么就没见这个方法被显示调用啊?但是知道去掉肯定不行,否则Console.writeLine(cs)就输出全变成了
“ 命名空间.Customer”这种类型了(测试的),输出函数Console.writeLine是怎么调用ToString()的?另外就是定义的那几个属性,例如
public string ID { get; set; } ,我把它们变成 成员变量public string ID ,运行程序也是一样的结果。我想问的是在这里使用属性有什么好处。
谁能深入显出的文字表述下属性那?问的问题有点多,多加点分,希望好心人平和的回答。
using System.Collections.Generic;
using System.Linq;
using System.Text;namespace QueryComplexObject
{
class Customer
{
public string ID { get; set; }
public string City { get; set; }
public string Country{ get; set; }
public string Region { get; set; }
public decimal Sales { get; set; }
public override string ToString()
{
return "ID:" + ID+" " + "City:" + City+" " + "Country:" + Country+" " + "Region:" + Region +" "+ "Sales:" + Sales;
}
} class Program
{
static void Main(string[] args)
{
List<Customer> customers = new List<Customer>
{
new Customer { ID = "A", City = "New YorK", Country = "USA", Region = "North USA", Sales = 9999},
new Customer { ID = "B", City = "MMubLik", Country = "India", Region = "Asia",Sales= 8888},
new Customer { ID = "C", City = "sdfasf", Country = "UK", Region = "PPa",Sales= 7777},
new Customer { ID = "D", City = "Mfdg", Country = "Dekl", Region = "Qcia",Sales= 6666},
new Customer { ID = "E", City = "MhjO", Country = "Dkka", Region = "Aivr",Sales= 5555},
new Customer { ID = "F", City = "ghjONO", Country = "Pool", Region = "Sdia",Sales= 4444},
new Customer { ID = "G", City = "cvNO", Country = "Ekkiv", Region = "Parti",Sales= 3333},
new Customer { ID = "H", City = "Palu", Country = "CllKu", Region = "Lric",Sales= 2222},
new Customer { ID = "I", City = "Mosco", Country = "Drro", Region = "Ytile",Sales= 1111},
new Customer { ID = "G", City = "Seml", Country = "Swrit", Region = "Hikru",Sales= 1000},
new Customer { ID = "K", City = "Mdsf", Country = "Adfin", Region = "Sxia",Sales= 2000},
new Customer { ID = "L", City = "istan", Country = "Cink", Region = "Nikal",Sales= 3000},
new Customer { ID = "M", City = "Shanghai", Country = "Asdsd", Region = "Lusia",Sales= 4000},
new Customer { ID = "N", City = "Wuhai", Country = "Gfgf", Region = "Srima",Sales= 5000},
new Customer { ID = "O", City = "Dalian", Country = "Efhj", Region = "Vgen",Sales= 6000},
new Customer { ID = "P", City = "Mexige", Country = "Bddfg", Region = "Waga",Sales= 7000},
new Customer { ID = "Q", City = "LLucy", Country = "Ehjgh", Region = "Ericsi",Sales= 8000},
new Customer { ID = "R", City = "London", Country = "Ffghfg", Region = "Fulli",Sales=9000},
new Customer { ID = "S", City = "Bejing", Country = "Cdsfdf", Region = "Jicci",Sales= 1001},
new Customer { ID = "T", City = "Limas", Country = "IOll", Region = "Malli",Sales= 2000}, };
var queryResult = from c in customers where c.Region == "Asia" select c;
Console.WriteLine("Customers in Asic");
foreach (Customer cs in queryResult)
{
Console.WriteLine(cs);
}
Console.WriteLine("press anykey to go out");
Console.ReadKey(); }
}
}
首先是那个重写的方法ToString(),我怎么就没见这个方法被显示调用啊?但是知道去掉肯定不行,否则Console.writeLine(cs)就输出全变成了
“ 命名空间.Customer”这种类型了(测试的),输出函数Console.writeLine是怎么调用ToString()的?另外就是定义的那几个属性,例如
public string ID { get; set; } ,我把它们变成 成员变量public string ID ,运行程序也是一样的结果。我想问的是在这里使用属性有什么好处。
谁能深入显出的文字表述下属性那?问的问题有点多,多加点分,希望好心人平和的回答。
如果Customer 没有重写ToString,那么cs.ToString得到的是Customer 类型信息
属性的好处我举个例子。
直接用public string Gender成员变量来保存性别,那么别人的代码会这么调用:
string gender = cs.Gender;
现在,为了节省空间,要求性别用bool型表示
则Gender成员变量修改成public bool Gender,这样一来,所有调用了Gender的代码都要改动,假如是这样
private string gender;//成员变量
public string Gender{get{return gender;}}//属性
别人这么调用string gender = cs.Gender;
当gender 改成bool,我们只需修改属性
public string Gender{get{if(gender)return "男";else return "女";}}
所有别人的调用代码都不需改动public string ID { get; set; } 实际上是一种简化写法,编译器自动生成成员变量
重写ToString方法,可以改变默认的返回情况,指定需要返回的处理语句
属性有很多好处
1可以设定访问修饰符
如果你不想让别人能够修改ID就写成 publc string ID{get; private set;}
等等
2.可以在属性使用的时候添加处理语句
public string ID
{
get
{
Console.Writeline("ID");
return _id;
}
set
{
_id = value;
CONSOLE.WRITELINE("ID");
}
}
等等
如果类实现了IFormattable接口,AppendFormat()方法就调用IFormattable接口的方法
否则调用类的 Tostring()方法!
这个问题的详细解答,你可以参考《C#高级编程》第六版 第八章(190页)第二个问题:另外就是定义的那几个属性;public string ID(get;set;) 是C#3.0的写法,它等价于private string _id;public string ID
{
get
{
retrun_ID;
}
set
{
_id=value;
}
}这样写,也许能方便看出它和public string ID区别了至于用属性的好处有很多,《effictive C#》第一节就讲了这个问题
另外可以参考
开始的时候string方法并没有被传值,所以你无法使用override方法进行覆盖。
所以就无法调用。