之前学习的是C#2.0,今天找了一本C#5.0的书翻了一下。
才知道还有自动属性和计算属性,程序学习果然不进则退。
照书上的要求写了个代码。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace 属性2计算属性和自动属性
{
class Program
{
static void Main(string[] args)
{
Contact c = new Contact();
c.FirstName = "t";
c.SecondName = "lu";
c.DateOfBirth = new DateTime(1994, 12, 8);//注意
Console.WriteLine(c.ToString());
c.Search(37.344f, 44.4f);
c.Search(37.344f, 44.4f,50);
c.Search(37.344f, 43.4f,50,"len");
Console.WriteLine(c.VerifyEmailAddress("joe@example.com"));
Console.WriteLine(c.VerifyEmailAddress("jie@example.com"));
Console.ReadKey();
}
}
}
contact类
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace 属性2计算属性和自动属性
{
class Contact
{
// private string firstname;
// private string secondname;
private DateTime dateofbirth;
public DateTime DateOfBirth
{
set { this.dateofbirth = value; }
get { return this.dateofbirth; }
}
public string FirstName//自动属性,没有支撑字段 private string firstname;
{
get;//自动属性格式
set;
}
public string SecondName
{
get;
set;
}
public string FullName//计算属性,该属性是只读的,同时没有支撑字段
{
get { return FirstName + " "+SecondName; }
}
public override string ToString()
{
StringBuilder stringBudier = new StringBuilder();
// stringBudier.AppendFormat("name:{0}{1}\r\n", this.firstname, this.secondname);
stringBudier.AppendFormat("name:{0}\r\n", this.FullName);//属性的使用
stringBudier.AppendFormat("date of birth:{0}\r\n", this.DateOfBirth);//属性的使用
return stringBudier.ToString();
}
public bool VerifyEmailAddress(string emailAddress)
{
string baseMail = "joe@example.com";
if (baseMail==emailAddress)
{
return true;
}
return false;
}
public void Search(float latitude,float longitude)
{
Search(latitude, longitude, 10, "en-us");
}
public void Search(float latiude,float longitude,int distance)
{
Search(latiude, longitude, distance, "en-us");
}
public void Search(float latiude, float longitude, int distance,string cultre)
{
/*Console.Write("latitude:{0}", latiude);
Console.Write("longtidue:{0}", longitude);//
Console.Write("distance:{0}", distance);
Console.WriteLine("culture:{0}", cultre);*/
Console.WriteLine("latitude:{0},longtidue:{1},distance:{2},culture:{3}", latiude, longitude, distance,cultre);
}
}
}
在最后一个search上报错了,之前一直说格式不匹配。
然后我 懵了很久
才发现之前是这样写的
Console.WriteLine("latitude:{0},longtidue:{1},distance:{3},culture:{4}", latiude, longitude, distance,cultre);
看出来区别了么,就是占位符从1,跳到3了。
后来有进行实验,发现这个格式符只能从0开始,你是1,2,3,4就不行。
有一个字符就也得从0开始。
之前一直以为数字是装样子的。。
看来编译器是靠数字来匹配的。
内部原理不知道,后面看看clr再来更新。