以接口作为返回值的方法具体是怎么实现的?高手指点下,一直搞不太清除!

ysx10086 2014-11-23 09:21:51
[C#]
public IWorkspace OpenFromFile (
string fileName,
int hWnd
);
...全文
306 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
hhj_2679464683 2014-11-24
  • 打赏
  • 举报
回复
利用接口实现选择不同语言的示例 public partial class Form1 : Form { public Form1() { InitializeComponent(); } // 声明一个接口,用于定义Seak方法,而具体Speak方法功能的实现是在类中进行的 interface ISelectLanguage { void Speak(string str); } // 如果跟中国人对话,则说汉语 class C_SpeakChinese : ISelectLanguage { public void Speak(string str) { MessageBox.Show("您对中国友人说:" + str, "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); } } // 如果跟俄国人对话,则说俄语 class C_SpeakEnglish : ISelectLanguage { public void Speak(string str) { MessageBox.Show("您对俄国友人说:" +str, "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); } } private void Form1_Load(object sender, EventArgs e) { comboBox1.SelectedIndex = 0; } public bool CheckChinese(string str) { bool flag = false; UnicodeEncoding a = new UnicodeEncoding(); byte[] b = a.GetBytes(str); for(int i=0;i<b.Length;i++) { i++; if (b[i] != 0) { flag = true; } else { flag = false; } } return flag; } private void button1_Click(object sender, EventArgs e) { if (txtContent.Text == "") { MessageBox.Show("不想跟友人说点什么吗?", "警告", MessageBoxButtons.OK, MessageBoxIcon.Error); return; } else { if (comboBox1.SelectedIndex == 0)//与中国人对话 { if (CheckChinese(txtContent.Text)) { ISelectLanguage Interface1 = new C_SpeakChinese(); Interface1.Speak(txtContent.Text); } else { MessageBox.Show("请和中国友人说汉语?", "警告", MessageBoxButtons.OK, MessageBoxIcon.Error); return; } } else//与俄国人对话 { if (CheckChinese(txtContent.Text)) { MessageBox.Show("请和俄国友人说俄语?", "警告", MessageBoxButtons.OK, MessageBoxIcon.Error); return; } else { ISelectLanguage Interface1 = new C_SpeakEnglish(); Interface1.Speak(txtContent.Text); } } } } }
slwsss 2014-11-23
  • 打赏
  • 举报
回复
interface A { } class B : A { public static A func() { return new B(); } } 返回值对象类型继承至返回类型
threenewbee 2014-11-23
  • 打赏
  • 举报
回复
特别就你的代码来说,它返回的是一个COM对象,这里面有一系列复杂的过程,总之,返回接口,而不是具体的类型是因为COM对象本身需要一个包装类才能和.NET兼容,这个类是动态产生的,它没法直接写出来,只能用接口表示。
江南小鱼 2014-11-23
  • 打赏
  • 举报
回复
interface Language
{
    void SayHello();
}
class EnglishGreeting:Language
{
public void SayHello()
{
   Console.WriteLine("Hello,Good morning.");
}
}

class ChineseGreeting:Language
{
public void SayHello()
{
   Console.WriteLine("早上好!");
}
}
Language greeting = new EnglishGreeting();
greeting.SayHello();
Language greeting = new ChineseGreeting();
greeting.SayHello();
江南小鱼 2014-11-23
  • 打赏
  • 举报
回复
接口作为返回类型的好处,能够实现一定的灵活性。举个简单的例子
[/interface Language
{
    void SayHello();
}
class EnglishGreeting:Language
{
public void SayHello()
{
   Console.WriteLine("Hello,Good morning.");
}
}

class ChineseGreeting:Language
{
public void SayHello()
{
   Console.WriteLine("早上好!");
}
}code]
调用的时候
想用英文打招呼
[code=csharp]Language greeting = new EnglishGreeting();
greeting.SayHello();
中文打招呼
Language greeting = new ChineseGreeting();
greeting.SayHello();
软件运行在国外,实例化EnglishGreeting,在国内运行,实例化ChineseGreeting 不就具有一定的灵活性了麽?

111,092

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧