سؤال

ولقد اثنين من الطبقات التي لها بعض الطرق الشائعة مثل funcA ()، funcB ()

ووترتبط بعض الطرق فقط لفئتها ...

وماذا فعلت يتم اجهة TestInterface

public interface TestInterface
{
   void funcA()
   void funcB()
}


public class ClassA : TestInterface
{
  public  void funcA()
   {
     Console.WriteLine("This is ClassA FuncA()");
   }
  public  void funcB()
   {
     Console.WriteLine("This is ClassA FuncB()");
   }
  public void myFuncA()
   {
      Console.WriteLine("This is My Own Function A");
    }

}

public class ClassB : TestInterface
    {
      public  void funcA()
       {
         Console.WriteLine("This is ClassB FuncA()");
       }
      public  void funcB()
       {
         Console.WriteLine("This is ClassB FuncB()");
       }
      public void myFuncB()
       {
          Console.WriteLine("This is My Own Function B");
       }

    }



public static void main()
{
 TestInterface test = new ClassA();
 test.funcA();
}

وكما ش نرى في أعلى فئتين. لدي ظيفتين myFuncA () وmyFuncB () ليست جزءا من واجهة. أنها تنتمي فقط إلى الدرجة الخاصة.

وكيف يمكنني الاتصال بهم من الأسلوب الرئيسي. حيث أنا خلق كائن من TestInterface وتهيئة مع بعض الطبقة الطفل ؟؟؟.


وفعلا لدي فصول منفصلة في DAL.

ولديهم بعض الطرق الشائعة. وبعض طرق المتعلقة بالطبقة الخاصة بهم.

وأريد أن تنفيذ خطة مصنع في هذا الشأن.

وماذا علي أن أفعل الآن؟

هل كانت مفيدة؟

المحلول 7

is it good to add methods of ClassA and ClassB into interface and provide null implementation in other class?
like 

public interface TestInterface
{
void funcA();
void funcB();
void myFuncA();
void myFuncB();
}


public class ClassA:TestInterface
{
public void funcA()
{
 // some code here
}

public void funcB()
{
 // some code here
}
public void myFuncA()
{
 // my own code here
}
public void funcB()
{
 // null implementation
}
}

ووبالعكس من ذلك في CLASSB

نصائح أخرى

إذا كنت تسألك ما إذا كنت تستطيع أن تفعل شيئا مثل:

public static void Main(string[] a)
{
 TestInterface test = new ClassA();
 test.myFuncA();
}

والجواب هو لا. سيكون لديك ليطرح للClassA أولا. حقيقة أن كنت تعتقد أنك بحاجة للقيام بذلك يشير إلى أن هناك على الأرجح شيء خاطئ مع التصميم الخاص بك.

TestInterface test = new ClassA();
 test.myFuncA();
(test as ClassB).myFuncB();

ونأمل أن كان هذا ما كنت أبحث عنه.

تأكد واجهة جديدة لClassA وCLASSB وتحتاج فقط للادلاء الفئة إلى واجهة الصحيحة لمعرفة وظائف جديدة.

public class ClassA : TestInterface, TestInterfaceA {
}

وهكذا، عندما تحصل على سبيل المثال الملموس يلقي مجرد أن لTestInterfaceA لرؤية وظائف محددة لهذه الفئة.

ويمكنك يلقي الكائن TestInterface، لكنه ينفي الغرض من تعدد الأشكال ...

public static void main()
{
 TestInterface test = new ClassA();
 test.funcA();
((ClassA) test).myFuncA();
}

وحاول الصب. أفترض من السؤال الذي يعني شيئا مثل هذا:

public void simpleMethod(TestInterface variableName) {
   if (variableName is ClassA) {
       ((ClassA)variableName).myFuncA();
    }
}

ومحسن أنا الخلط حقا مع سؤالك

وإذا كنت ترغب فقط لاستدعاء MyFuncA () أو MyFuncB () فقط يجب إنشاء مثيل CALSS الخاصة بهم مثل

ClassA a = new ClassA();
a.FuncA(); //interface member
a.FuncB(); // interface member
a.MyFuncA(); //class A Member

وأنا لا يمكن أن undrestand لماذا تحاول إنشاء مثيل واجهة ومن ثم استدعاء الأساليب فرعية !!!! هل انا على حق ؟ أو Imisunderstood مشكلتك؟

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top