【发布时间】:2013-06-19 07:23:37
【问题描述】:
我试图弄清楚如何编写一个类,其中基类将提供访问器函数,然后实例化类只需要提供值。
类似这样的:
public interface IBaseClass
{
int GetHandlerID();
}
public abstract class AbstractClass : IBaseClass
{
private int HandlerID;
public virtual int GetHandlerID()
{
return (this.HandlerID);
}
}
public class MyClass : AbstractClass
{
int HandlerID = 1;
}
class Program
{
static void Main(string[] args)
{
MyClass newClass = new MyClass();
Console.WriteLine("HandlerID: {0}"), newClass.GetHandlerID() );
}
}
这种方式不起作用,因为该类将读取 AbstractClass 中的 HandlerID 而不是 MyClass 变量。使用 Virtual 或 Abstract 对变量无效,因此除了每次派生新类时都必须实现属性外,我不确定如何执行此操作。
我要做的是为人们提供一个接口来构建他们自己的插件类,它会使用基类提供的访问器方法。我不想每次创建类的新实例时都必须实现相同的属性方法。
我想出了一种方法来做我想做的事。这样,我可以在基类中拥有默认的 getter/setter,而不必在使用基类的每个定义中创建它们。这不是我想要的,但它会起作用。
public abstract class AbstractClass : IBaseClass
{
private int m_HandlerID = 0;
public int HandlerID
{
get { return (this.m_HandlerID); }
set { this.m_HandlerID = value; }
}
private string m_HandlerDescription = "undefined";
public string HandlerDescription
{
get { return this.m_HandlerDescription; }
set { this.m_HandlerDescription = value; }
}
}
public class MyClass: AbstractClass
{
public MyClass()
{
HandlerID = 1;
HandlerDescription = "MyClass";
}
}
class Program
{
static void Main(string[] args)
{
MyClass newClass = new MyClass();
Console.WriteLine("Handler: {0}[{1}]", newClass.HandlerDescription, newClass.HandlerID);
}
}
【问题讨论】:
标签: c# properties virtual field abstract