如何强制仅通过其界面调用对象?这只能通过Access Modifier实现,但在C#中无法做到。
我有:
public interface IProfile { string GetName(); }
public class Profile : IProfile {
public string GetName() { return "Linh"; }
}
我有一个像上面这样的代码部分。之后我将它放在一个类库中,然后生成一个程序集。
在Web项目中,一些程序员将添加对该程序集的引用。如果他们想调用Profile类,那么他们必须使用IProfile接口作为下面的声明:
IProfile ip = new Profile();
ip.GetName();
但是一些粗心的程序员不会这样做。他们将使用以下方式:
Profile pr = new Profile();
pr.GetName();
答案 0 :(得分:3)
这很简单。使用显式接口实现:
public interface IProfile { string GetName(); }
public class Profile : IProfile
{
string IProfile.GetName() { return "Linh"; }
}
GetName
现在只能通过接口引用调用。
答案 1 :(得分:2)
你会想采用工厂方法,如下:
using System;
using Ext;
namespace ConsoleApplication26
{
class Program
{
static void Main(string[] args)
{
IFoo foo = FooFactory.GetFoo();
}
}
}
// another project/dll
namespace Ext
{
public interface IFoo
{
void M ();
}
public static class FooFactory
{
public static IFoo GetFoo ()
{
return new Foo();
}
}
class Foo : IFoo
{
public void M () { }
}
}
答案 2 :(得分:0)
如果问题意味着“如何仅强制调用接口方法?”,那么答案可能是:“将其余方法设为私有”