初学者,想问下C#中的关于扩展方法的问题?

我是按照书上从少到多一步步来做的,学到扩展方法使用这一节一直弄不对。相关程序如下。书上这一节 要求是:新建一个名为Extension.cs文件,将其声明为静态的,并创建名为GetFullName的扩展方法,扩展Contact,并使用属性FullName逻辑。删除Contact类的FullName属性,并使用ToString方法,使其使用新增的扩展方法。已实现结果为:

namespace Consolemeans
{
class Program
{
static void Main(string[] args)
{
Contact c = new Contact();
Console.WriteLine(c.ToString());
c.FirsiName = "Jim";
c.LastName = "Morrison";
Console.WriteLine(c.ToString());
}
}
}

namespace Consolemeans
{
class Contact
{
private string firsiName;
public string FirsiName
{
get
{
return this.firsiName;
}
set
{
this.firsiName = value;
}
}
private string lastName;
public string LastName
{
get
{
return this.lastName;
}
set
{
this.lastName = value;
}
}
public string FullName
{
get
{
return "Name:" + this.FirsiName + " " + this.LastName+"\n";
}
}
public override string ToString()
{
StringBuilder StringBuilder = new StringBuilder();
StringBuilder.AppendFormat("Name:{0} \r\n", this.FullName);
return StringBuilder.ToString();
}
}
}
谢谢啦,就是搞不懂自己怎么弄不对。

你写的这个的运行结果就是图中的样子的,你的扩展方法呢?
我想,楼主的意思是这样的:
1、使用扩展方法,下面有代码:
namespace Consolemeans
{
public static class Extension
{
public string GetFullName(this Contact ct)
{
return "Name:" + ct.FirsiName + " " + ct.LastName+"\n";
}
}
}
2、将上面的代码放到Extension.cs文件中,并修改原来的 ToString()方法如下:
public override string ToString()
{
StringBuilder StringBuilder = new StringBuilder();
StringBuilder.AppendFormat("Name:{0} \r\n", this.GetFullName());
return StringBuilder.ToString();
}
3、删除原来的如下属性:
public string FullName
{
get
{
return "Name:" + this.FirsiName + " " + this.LastName+"\n";
}
}追问

public string GetFullName(this Contact ct)
错误 1 未能找到类型或命名空间名称“Contact”(是否缺少 using 指令或程序集引用?)
StringBuilder.AppendFormat("Name:{0} \r\n", this.GetFullName());

有两个错误,我不知道为什么,我经常遇到这种问题。

追答

Extension类和Contact类如果在同一个命名空间Consolemeans中,怎么可能出现这个错误。

温馨提示:内容为网友见解,仅供参考
第1个回答  2013-10-28
不明白 你问的是什么!!我给你加 了个方法!稍微改了下
class Contact 里面 加了个:
public string getFullName(string fullname)
{
StringBuilder StringBuilder = new StringBuilder();
StringBuilder.AppendFormat("Name:{0} \r\n", fullname);
return StringBuilder.ToString();
}
主方法:

static void Main(string[] args)
{

Contact c = new Contact();
Console.WriteLine(c.ToString());
Console.ReadLine();
c.FirsiName = "Jim";
c.LastName = "Morrison";
Console.WriteLine(c.ToString());
Console.ReadLine();
Console.WriteLine((c.getFullName(c.FullName)).ToString());
Console.ReadLine();

}

初学者,想问下C#中的关于扩展方法的问题?
1、使用扩展方法,下面有代码:namespace Consolemeans { public static class Extension { public string GetFullName(this Contact ct){ return "Name:" + ct.FirsiName + " " + ct.LastName+"\\n";} } } 2、将上面的代码放到Extension.cs文件中,并修改原来的 ToString()方法如下:public ...

C# 如何给自定义类的属性添加方法
你可以把返回类型“int”改成你自定义的一个类如:public B A{get{};set {};} ;然后在B类内写方法 class B {void a(){}};然后这样调用:AA aa=new AA();B b=new B();aa.A=b;\/\/因为属性的返回类型是对象,所以把对象的地址赋给此属性就可以找到访问了 aa.A.a();就可以了...

初学者的网络问题:C类地址包含512个主机是什么意思?
C类地址就是那些从192开始的地址,而且这种地址的子网掩码通常是255.255.255.0,前三个255是网络号,后一个是主机号,如果你的网络里设置的IP为192.168.1.*的话,也就是说你的网络里可以有从192.168.1.0到192.168.1.254为255个IP号,即可接入255台电脑.同样,,如果你的子网掩码为255.255.254.0的话,那你就又多了255...

我现在学习c语言,学的很烂,希望指教一下
第一种方法:直接对这10个人问:“谁叫张三”。第2种方法:你挨个去问“你是不是张三?”,直到问到的这个人就是张三。第三种方法:你去挨个问一个人“你认不认识张三,指给我看”。不要小看这个问题,你说当然会选第一种方法,没错恭喜你答对了,因为这个方法最快,效率最高,但是在程序设计中找到解决问题的最优...

初学者怎样看懂代码?
初学者要看懂代码首先从要需求分析了解,然后是系统分析,最后是块的理解。看懂代码其实不难,大抵不过是选择,分支,循环。语法如果看不懂,那就需要补补基础,先弄清楚这段代码要做什么,有说明最好,可以帮助理解,没有说明就试着过一下代码流程。

C#\/.NET这些实用的技巧和知识点你都知道吗?
Visual Studio中,通过分析.NET Dump可以快速定位和解决内存泄漏等问题,提高性能。提升Visual Studio编程效率,本文提供一系列实用技巧,无论初学者还是经验者都能受益。Z.ExtensionMethods是一个强大的工具类库,包含超过1000种扩展方法,提升.NET Framework和.NET Core的使用效率。CodeGeeX AI编程助手利用深度...

我是小白,想自学编程c语言,需要哪种入门书籍自学!
如果你要学完那是有点不现实.因此你要回想一下你兴趣来源是什么?比如喜欢做黑客,喜欢研究反病毒,喜欢为Windows桌面开发一些实用的小软件等等.要分析好兴趣来由,在决定你的发展方向,就好了.比如你喜欢为WINDOWS开发软件,那么 C语言是必备基础,学好好了然后在扩展一门面向对象的语言比如C++ C# JAVA 等....

C#中三层架构是什么,请详细解释一下。
降低层与层间的依赖性,既可以良好地保证未来的可扩展,在复用性上也是优势明显。每个功能模块一旦定义好统一的接口,就可以被各个模块所调用,而不用为相同的功能进行重复地开发。进行好的分层式结构设计,标准也是必不可少的。只有在一定程度的标准化基础上,这个系统才是可扩展的,可替换的。而层与...

关于全国计算机等级考是的问题,谢谢了
内容包括:数据库基础知识,Visual FoxPro 6.0的数据库设计、数据库应用系统的创建操作,面向过程的程序设计和面向对象程序设计方法。每章后都附有一定数量的习题,供读者练习和自我检测。针对初学者的特点,全书在编排上注意由简及繁、由浅入深和循序渐进,叙述通俗易懂,内容简洁实用。 本书是参加二级Visual FoxPro程序...

c#自定义控件、控件功能扩展书籍?
移植的时候,要把参数部分分离出来,成为一个委派类型,再按照普通方法定义事件即可。 关于事件响应,c#与delphi等语言一样,是动态绑定事件过程的,其语法类似于下: internal myclass myobj; ... myobj = new myclass(); ... myobj.myevent += this.myobj_myevent; ... protected void myobj_myevent(object...

相似回答
大家正在搜