强制通过其接口调用对象

时间:2010-02-09 02:13:36

标签: c# oop interface

如何强制仅通过其界面调用对象?这只能通过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();

3 个答案:

答案 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)

如果问题意味着“如何仅强制调用接口方法?”,那么答案可能是:“将其余方法设为私有”