首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C#中的简单工厂模式

C#中的简单工厂模式
EN

Stack Overflow用户
提问于 2020-02-29 16:45:47
回答 1查看 207关注 0票数 0

我正在尝试创建一个简单的工厂模式。下面是我的示例代码:

IMobile:

代码语言:javascript
复制
namespace SimpleFactory
{
public interface IMobile
{
 void Hello();
}
}

IPhone:

代码语言:javascript
复制
namespace SimpleFactory
{
public class Iphone : IMobile
{
    public void Hello()
    {
        Console.WriteLine("Hello, I am Iphone!");
    }
}
}

诺基亚

代码语言:javascript
复制
namespace SimpleFactory
{
public class Nokia : IMobile
{
    public void Hello()
    {
        Console.WriteLine("Hello, I am Nokia!");
    }
}
public void NokiaClassOwnMethod()
    {
        Console.WriteLine("Hello, I am a Nokia class method. Can you use me 
with Interface");
    }
}

MobileFactory:

代码语言:javascript
复制
namespace SimpleFactory
{
public class MobileFactory
{
    public IMobile GetMobile(string mobileType)
    {
        switch (mobileType)
        {
            case "Nokia":
                return new Nokia();
            case "iPhone":
                return new Iphone();
            default:
                throw new NotImplementedException();
        }
    }
}
}

程序:

代码语言:javascript
复制
namespace SimpleFactory
{
class Program
{
    static void Main(string[] args)
    {
        MobileFactory factory = new MobileFactory();
        IMobile mobile = factory.GetMobile("Nokia");
        mobile.Hello(); 
        mobile.NokiaClassOwnMethod();


    }
}
}

我想访问诺基亚和Iphone的NokiaClassOwnMethod方法。我可以访问诺基亚或Iphone类的NokiaClassOwnMethod方法吗?若否,原因为何?(我可以将此NokiaClassOwnMethod方法添加到接口中,并能够访问它。但我的问题是如何访问类自己的方法?)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-02-29 16:57:11

为此,您需要将Hello方法添加到您的接口:

代码语言:javascript
复制
public interface IMobile
{
   void Hello();
}

以前无法访问它,因为您的工厂方法返回了一个接口,而接口不包含Hello()方法。因此,在运行时可以返回不同的类型,当您调用Hello时,将调用特定于子类的实现。如果您想要访问接口中不存在但在具体实现中存在的方法/属性,则需要强制转换:

代码语言:javascript
复制
MobileFactory factory = new MobileFactory();
IMobile mobile = factory.GetMobile("Nokia");
var iPhone = mobile as Iphone;
if(iPhone != null) iPhone.Hello();
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60463414

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档