C# C语言中的属性编程#

C# C语言中的属性编程#,c#,attributes,C#,Attributes,我是属性编程新手。不确定我问的问题是否正确 我有一个抽象基类(AbstractBase)和两个驱动类Derived1和Derived2。 我的AbstrartBase类有两种方法Method1和Method2 是否可以使用属性编程,以便在执行此操作时 AbstractBase ab= new Derived1(); 我只能访问Method1,当我使用Derived2类时,我只能访问Method2 这可能吗。如果是的话,那么你能给我一个开始的例子吗。我认为你把两个不同的固有性或多态性和属性概念联

我是属性编程新手。不确定我问的问题是否正确

我有一个抽象基类(AbstractBase)和两个驱动类Derived1和Derived2。 我的AbstrartBase类有两种方法Method1和Method2

是否可以使用属性编程,以便在执行此操作时

AbstractBase ab= new Derived1();
我只能访问
Method1
,当我使用
Derived2
类时,我只能访问
Method2


这可能吗。如果是的话,那么你能给我一个开始的例子吗。

我认为你把两个不同的固有性或多态性和属性概念联系起来了。在您遇到问题的情况下,您可以做的是,您可以使一个接口具有一个方法,并在派生类中以不同的方式实现它,而不是使用多态性来调用所需的实现。比如说

    public interface IBase
    {
      void Foo();
    }

    public class Derived1: IBase
    {
      public void Foo()
      {
        //Print Derived 1
      }
    }

    public class Derived2: IBase
    {
      public void Foo()
      {
        //Print Derived 2
      }
    }

   public class Program
   {
    public static void Main(String args[])
    {
      IBase base=new Derived1();
      base.Foo();//This prints Derived 1
      base=new Derived2();
      base.Foo();//This prints Derived 2
    }
   }
其中,C#中的as属性用于将元数据附加到类或类成员,以及应用公共行为时,无需为共享行为的每个单元实现特定接口。它们是这样使用的

    [MyAttribute]
    public class MyClass
    {
      //Class body
    }
您需要使用GetCustomAttribute()方法调用该属性,否则它将不起任何作用。有关属性的更多信息,请参阅本文
希望这能帮助你。

什么是“属性编程”?不管怎样,“不”——不是那样的。这是因为
AbstractBase
定义了这两个方法(因此,所有派生类都继承这些方法)。如果您只想在特定的派生类中使用它,请在那里声明它。如果您只想让外部代码看不到基本方法,您可以使用足够的可见性修饰符-例如,
受保护的
。在您的情况下,一个界面会更好,这样您就可以将希望可见的方法声明为公共,并复制隐藏的方法