我正在尝试创建一个简单的工厂模式。下面是我的示例代码:
IMobile:
namespace SimpleFactory
{
public interface IMobile
{
void Hello();
}
}IPhone:
namespace SimpleFactory
{
public class Iphone : IMobile
{
public void Hello()
{
Console.WriteLine("Hello, I am Iphone!");
}
}
}诺基亚
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:
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();
}
}
}
}程序:
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方法添加到接口中,并能够访问它。但我的问题是如何访问类自己的方法?)
发布于 2020-02-29 16:57:11
为此,您需要将Hello方法添加到您的接口:
public interface IMobile
{
void Hello();
}以前无法访问它,因为您的工厂方法返回了一个接口,而接口不包含Hello()方法。因此,在运行时可以返回不同的类型,当您调用Hello时,将调用特定于子类的实现。如果您想要访问接口中不存在但在具体实现中存在的方法/属性,则需要强制转换:
MobileFactory factory = new MobileFactory();
IMobile mobile = factory.GetMobile("Nokia");
var iPhone = mobile as Iphone;
if(iPhone != null) iPhone.Hello();https://stackoverflow.com/questions/60463414
复制相似问题