سؤال

حسنا, أنا أحاول إعادة استخدام جزء من التعليمات البرمجية C#.انها فئة مجردة مع UDP الخادم الذي يمكن أن ينظر إليه هنا:

http://clutch-inc.com/blog/?p=4

لقد خلق فئة مشتقة مثل هذا:

public class TheServer : UDPServer
{
    protected override void PacketReceived(UDPPacketBuffer buffer)
    {
    }

    protected override void PacketSent(UDPPacketBuffer buffer, int bytesSent)
    {
    }
}

و في بلدي التطبيق لقد خلق مثيل من فئة مشتقة مثل هذا:

TheServer serv = new TheServer(20501);
serv.Start();

ولكن لدي أخطاء و أنا لا أفهم حقا لماذا.الرجاء المساعدة.

  1. 'TheProject.الملقم' لا تحتوي على منشئ أن يأخذ '1' الحجج
  2. 'TheProject.UDPServer.Start()' هو لا يمكن الوصول إليها بسبب الحماية المستوى
  3. 'TheProject.UDPServer' لا لا تحتوي على منشئ أن يأخذ '0' الحجج
هل كانت مفيدة؟

المحلول

منشئات لا تحصل الموروثة في C#.سيكون لديك سلسلة يدويا:

public TheServer(int port) 
 : base(port)
{
}

أيضا, إذا بدء محمي, سيكون لديك لخلق نوع من الطريقة العامة أن تدعو عليه:

public void StartServer()
{
    Start();
}

نصائح أخرى

الخاص بك فئة مشتقة يحتاج إلى إضافة واحد المعلمة منشئ, وتفويض الأمر إلى الفئة الأساسية:

 public TheServer(int port) : base(port) {}

أيضا ، Start طريقة محمي.سوف تحتاج الخاص بك:

public void StartMe(){base.Start();}

هذه الأخطاء فعلا واضحة إلى حد ما أسباب:

  1. لم يعرف منشئ في فئة مشتقة (TheServer).منشئات (على عكس أساليب بالطبع) لا أوتوماتيكيا ، لذلك عليك أن تعلن المنشئات التي تطابق اليك منها في الفئة الأصل سلسلة لهم معا باستخدام شيء من هذا القبيل:

    public TheServer(int port) : base(port)
    {
        // Your code here.
    }
    
    public TheServer() : base()
    {
        // Your code here.
    }
    
  2. على Start طريقة أعلن protected في قاعدة (UDPServer) فئة.إما تغيير الوصول التعديل في قاعدة الطبقة public, أو معرفة طريقة استدعاء الأسلوب من فئة مشتقة عند الحاجة (وهذا الأخير يجب أن يكون المقصود من كاتب UDPServer).

  3. نفس السبب 1 ، باستثناء هذا يشير إلى الافتراضي (parameterless) منشئ.

على أمل أن يساعد.

أنت لم تحدد الملقم منشئ مع حجة واحدة بحيث لا يمكن استدعاء الملقم(20501);أنت لم تحدد صفر الحجج منشئ UDPServer ولكن هل يعرف أحد مع أحد حجة.لديك طريقتين في الملقم المحمية ، وبالتالي الخطأ في رقم 2.

  1. و 3.

إضافة منشئ إلى الملقم الذي يستدعي قاعدة منشئ (من UDPServer);شيء من هذا القبيل:

public TheServer(int port) : base(port) {}

2 تحقق من طريقة البدء على UDPServer:محمي.وهذا يعني أنه فقط فرعية من فئة يمكن أن يطلق عليه.

public class TheServer 
{   
    public TheServer():base(port) {
    }    
}

var myServer = new TheServer(1337).Brings().All().The().Boys().to().The().Yard()

سوف تحتاج إلى إضافة رمز إلى فئة مجردة ولكن في كامل تخمين ،

لديك ctor في UDPServer الفئة التي لم تنفذ في الملقم فئة...كنت بحاجة إلى شيء من هذا القبيل...

public TheServer(int port) : base(port)
{
   ... specifics
}

و أيضا كنت قد نسيت أن تجاوز البداية (طريقة) في الملقم فئة ولكن لها وضع خاص في الطبقة الأساسية...الأساسية الخاصة بك فئة يجب أن يكون شيء من هذا القبيل...

//In UDPServer
protected void Start()
{
   //Code to start
}

//In TheServer
protected void StartTheServer()
{
   base.Start();
}

و ما يستحق أنصح باستخدام:

UDPServer serv = new TheServer(20501);
serv.start();

أو ربما حتى أكثر من عام ، الخادم.يعتمد على ما هي الطرق التي تحتاج إلى الاتصال على سيرف.

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