我有很多具有以下成员/方法的类:
private String name;
public String getName() { return name; }
public void setName(String name) { this.name = name; }
public bool isNamed(String name) { return getName().Equals(name); }
每次我创建一个具有成员“name”的新类时,我都必须重写所有这些。 有没有办法一次编写方法并使它们适用于我想要的任何类?
答案 0 :(得分:3)
您只需定义一个基类(您可以将其抽象化):
public abstract class Named
{
public string Name { get; set; }
}
并从中继承:
public class Person : Named
{
}
在C#中你真的不需要isNamed
,将字符串与==
进行比较是完全安全的。
如果您的班级已经从另一个非Named
的班级继承,您必须手动添加Name
自动媒体资源或诉诸simulated multiple inheritance。
或者,您可以为每个基类创建Named
的特定修改:
public abstract class NamedLifeForm : LifeForm
{
public string Name { get; set; }
}
public class Person : NamedLifeForm
{
// Person inherits both a Name and all relevant members of LifeForm
}
另一种替代方法是创建一个通用包装器Named<T>
,它将具有两个属性:Name
和T
实例。但这会使构造和访问变得繁琐,所以我不推荐它。
答案 1 :(得分:3)
您的代码可以转换为:
public String Name { get;set;}
然后您可以这样使用它:
nObject.Name = "Stefan";
if(nObject.Name == "Stefan"){
// do something
}else{
// do something else
}
要自动应用于所有类,您只需将其设置为界面:
public interface INameable{
public String Name {get;set;}
}
执行此操作将允许您从其他重要的基类继承。
点击此处查看example
class YourClass : INameable{
//implementation
}
现在,YourClass
自动插入“名称”属性。
答案 2 :(得分:2)
C#只有AutoProperties:
public String Name {get; set; }
它处理你所谈到的getName()和setName()。
用法:
设置值:Name = "MyName;
获取值:string theName = Name;
答案 3 :(得分:0)
我建议阅读面向对象编程。你可以节省很多时间和精力(和he))。这是一个很好的引物http://www.amazon.com/Beginning-Object-Oriented-Programming-Dan-Clark/dp/1430235306
要回答您的具体问题,您应该阅读有关继承的内容。它允许您定义带有函数的“父”类。然后你可以继承“Child”类并具有相同的功能。
http://msdn.microsoft.com/en-us/library/ms173149(v=vs.80).aspx
这是一个代码示例
public class PersonBase
{
private String name;
public String getName()
{
return this.name;
}
public void setName(string name)
{
this.name = name;
}
public bool isNamed(string name)
{
return this.name.Equals(name);
}
}
public class Employee : PersonBase
{
}
员工现在拥有PersonBase定义的任何内容。
正如其他人所指出的那样,您可以使用属性简化代码。您还应该在使用“this.name”之前检查空值。
以下是属性的链接: http://msdn.microsoft.com/en-us/library/x9fsa0sw(v=vs.80).aspx
简化的代码示例如下:
public class PersonBase
{
public String Name { get; set; }
}
public class Employee : PersonBase
{
}
我希望这有助于您指明正确的方向来学习这些概念。