[英]C# inheritance build errors
我是Stack Overflow的新手,還是一名新手程序員。 我正在嘗試在Visual Studio 2010 C#中構建其他人的代碼,作為學習的機會。 我無法弄清楚為什么在附加的存根代碼(我從原始程序中刪除了與錯誤無關的所有內容)底部的四個類(第50、59、67和75行)中出現以下三個錯誤):
1. “c_basic_object” Method must have a return type 2. “:” ; expected 3. “(p_name)” Invalid token ')' in class, struct, or interface member declaration 4. “p_name” The type or namespace name 'p_name' could not be found (are you missing a using directive or an assembly reference?)
該代碼幾乎與Andrew Troelsen的Pro C#2005第4章中的Employee和Manager類相同。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace TestStub
{
class Program
{
static void Main(string[] args)
{
String strTest1 = "This is a string #1";
String strTest2 = "This is a string #2";
c_basic_object objBasic = new c_basic_object(strTest1);
Console.WriteLine(objBasic.m_name);
c_abstract_button_widget objButton = new c_abstract_button_widget();
Console.WriteLine("Test, Test, Test");
Console.ReadKey(true);
Console.WriteLine();
}
}// End class Program
public class c_basic_object
{
public string m_name = String.Empty;
//Constructor create_basic_object( p_name)
public c_basic_object(string p_name)
{
m_name = p_name;
}
// create_basic_object
//Constructor construct_empty()
public c_basic_object()
{
}
// construct_empty
//@ Destructor Destroy()
~c_basic_object()
{
}
} // End class c_basic_object
// -- definitions only for the Virtual Abstract functions in the factory
public class c_abstract_button_widget: c_basic_object
{
public c_basic_object(string p_name) : base(p_name)
{
//Console.WriteLine("Inside c_abstract_button_widget ");
}
} // end c_abstract_button_widget
// c_abstract_button_widget
public class c_abstract_label_widget: c_basic_object
{
public c_basic_object(string p_name) : base(p_name)
{
}
} // end c_abstract_label_widget
// c_abstract_label_widget
public class c_abstract_draw_surface_widget: c_basic_object
{
public c_basic_object(string p_name) : base(p_name)
{
}
} // end c_abstract_draw_surface_widget
// c_abstract_draw_surface_widget
public class c_abstract_scrollbar_widget: c_basic_object
{
public c_basic_object(string p_name) : base(p_name)
{
}
} // end c_abstract_scrollbar_widget
}// End namespace TestStub
問題在這里:
public class c_abstract_button_widget: c_basic_object
{
public c_basic_object(string p_name) : base(p_name)
{
//Console.WriteLine("Inside c_abstract_button_widget ");
}
}
要聲明構造函數,您必須指定類名-但您已經編寫了c_basic_object
。 你的意思是:
public class c_abstract_button_widget: c_basic_object
{
public c_abstract_button_widget(string p_name) : base(p_name)
{
//Console.WriteLine("Inside c_abstract_button_widget ");
}
}
您在其他子類中也有同樣的問題。
另外,您絕對應該開始遵循.NET命名約定 。 在這種情況下,您的課程應為:
BasicObject
AbstractButtonWidget
AbstractLabelWidget
AbstractScrollbarWidget
...盡管您的“抽象”類實際上不是抽象的,但您可能想對它們進行重命名...並且您的BasicObject
應該是WidgetBase
(或AbstractWidget
,實際上是抽象的...)
您的參數應該只是name
而不是p_name
。
我也建議保持所有領域的私人(我溝m_
前綴為好,但如果字段是私有,這不是那么糟糕) -你可能要暴露名稱的屬性。
此外,你幾乎不需要在C#終結/析構函數。 絕對不要在您真正地知道自己需要一個之前就開始添加它們。
“c_basic_object” Method must have a return type
您試圖在派生類中創建構造函數,但是構造函數應以包含類而不是基類命名。 因此,編譯器將其作為名為c_basic_object
的方法來c_basic_object
,該方法必須具有返回類型。
那應該解決其他編譯器錯誤,因為: base(p_name)
不是方法的語法。
只需重命名您的構造函數:
public class c_abstract_button_widget: c_basic_object
{
public c_abstract_button_widget(string p_name) : base(p_name)
{
//Console.WriteLine("Inside c_abstract_button_widget ");
}
}
public class c_abstract_label_widget: c_basic_object
{
public c_abstract_label_widget(string p_name) : base(p_name)
{
}
}
public class c_abstract_draw_surface_widget: c_basic_object
{
public c_abstract_draw_surface_widget(string p_name) : base(p_name)
{
}
}
public class c_abstract_scrollbar_widget: c_basic_object
{
public c_abstract_scrollbar_widget(string p_name) : base(p_name)
{
}
}
其他建議:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.