C#中直接通过类调用父类方法是否可行?
问题解答
这种写法完全可行,你没搞懂的点是C#里的静态方法(Static Method)。
先给你掰明白两种方法的核心区别:
- 实例方法:就是你之前熟悉的那种,必须先
new出类的实例,再通过实例调用。这类方法一般和具体实例的状态绑定,比如要修改某个Book实例的标题,就得用实例方法。 - 静态方法:属于类本身,不属于任何单个实例,所以直接用
类名.方法名()就能调用。这类方法通常是通用工具类,或者不需要依赖实例属性就能完成的操作——比如你例子里的Find方法,它只需要一个ID参数就能去数据源里查对应对象,根本不需要依赖某个具体的Book实例。
拿你的代码举例,Book.Find的定义肯定带了static关键字,大概长这样:
public class Book { public string Title { get; set; } public int Id { get; set; } // 静态方法:用static修饰 public static Book Find(int bookId) { // 这里写根据ID查询数据的逻辑,比如查数据库 return /* 查询到的Book对象 */; } }
要是换成你之前理解的实例方法,写法就不一样了,得去掉static,调用时也得用实例:
public class Book { public string Title { get; set; } public int Id { get; set; } // 实例方法:没有static修饰 public Book Find() { // 比如基于当前实例的ID去查询 return /* 查询到的同ID的Book对象 */; } } // 调用方式就得是: var savedBook = harryPotterBook.Find();
简单总结:静态方法是“类的方法”,实例方法是“对象的方法”,区分的关键看方法是否需要依赖实例的状态。
内容的提问来源于stack exchange,提问作者Immanuel
相关产品推荐
相关产品推荐

