C# 本课程中使用的OOPs概念
考虑一个简单的类C# 本课程中使用的OOPs概念,c#,java,class,oop,C#,Java,Class,Oop,考虑一个简单的类a class A { int id=0; public int getId() { return this.id++; } } 问题是以上课程中使用的所有OOPS概念是什么? 我问面试官,他所说的OOPS概念是什么意思,回答是一般OOPS概念,如继承、多态性等, 我回答说继承不在上面的代码中(没有可派生的基类),在那次运动中我能想到的唯一答案是: 变量隐藏,因为私有变量id只能通过getId方法访问 你们有什么抓到的吗 编辑: c#会是什
a
class A
{
int id=0;
public int getId()
{
return this.id++;
}
}
问题是以上课程中使用的所有OOPS概念是什么?
我问面试官,他所说的OOPS概念是什么意思,回答是一般OOPS概念,如继承、多态性等,
我回答说继承不在上面的代码中(没有可派生的基类),在那次运动中我能想到的唯一答案是:
变量隐藏
,因为私有变量id
只能通过getId
方法访问
你们有什么抓到的吗
编辑:
c#会是什么?在java中,默认修饰符为internal
。
如果对c#提出同样的问题,会有什么变化吗?更好的问题应该是关于所有违反的良好编程实践 以
getId()
为例,它看起来像是一个简单的getter,但实际上修改了类的状态。它应该被称为generateId()
getNextId()
是可以接受的
封装(是的,变量隐藏的东西)也被违反了,因为
id
具有内部的而非私有的可见性,使得它对同一个包中的其他类是可见的,这没有什么好的理由。一个更好的问题是关于所有违反的良好编程实践
class A
{
private int id=0;
public int getId()
{
return this.id++;
}
}
以getId()
为例,它看起来像是一个简单的getter,但实际上修改了类的状态。它应该被称为generateId()
getNextId()
是可以接受的
封装(是的,变量隐藏的东西)也被违反,因为id
具有内部的而非私有的可见性,使得它对同一个包中的其他类可见,这是没有充分理由的
class A
{
private int id=0;
public int getId()
{
return this.id++;
}
}
它只遵循ADT的抽象,但不幸的是它没有封装。当一个变量是非私有的并且它有assessor方法时,我们不能将其称为封装,因为它没有隐藏数据。我们可以说,只有当它在id上有私有访问说明符时,它才遵循了封装
它只遵循ADT的抽象,但不幸的是它没有封装。当一个变量是非私有的并且它有assessor方法时,我们不能将其称为封装,因为它没有隐藏数据。我们可以说,只有当它在id处有私有访问说明符时,它才遵循了封装封装是我看到的唯一概念there@user1233963:那么,你是说变量隐藏的东西?(
id
被封装了吗?)这里没有封装
,默认为id
的访问修饰符。这里的原则是封装。OOP并不要求字段是专门的private
(尽管在实践中通常是这样),它只要求从类外部限制对字段的访问。在大多数OO语言(至少是C#和Java)中,默认情况下,所有类都扩展了一些基本对象。所以有技术上的继承(以及一些继承的方法)。我可能会在回答中提到它,尽管我不确定如果我问的话我会数到多少。。。哦,看起来还没有人提到它,但是“getter”在多线程上下文中的行为会很奇怪。封装是我看到的唯一概念there@user1233963:那么,你是说变量隐藏的东西?(id
被封装了吗?)这里没有封装
,默认为id
的访问修饰符。这里的原则是封装。OOP并不要求字段是专门的private
(尽管在实践中通常是这样),它只要求从类外部限制对字段的访问。在大多数OO语言(至少是C#和Java)中,默认情况下,所有类都扩展了一些基本对象。所以有技术上的继承(以及一些继承的方法)。我可能会在回答中提到它,尽管我不确定如果我问的话我会数到多少。。。哦,看起来还没有人提到它,但是“getter”在多线程上下文中的行为会很奇怪。谢谢你的观点。我现在注意到的另一件事是:getNextId
不是一个公认的名称,因为,您调用了多少次getId
函数,它将返回1I,我也标记了C
,以找出与该语言功能相关的内容。因为,在C#中,默认情况下,类的所有成员都是私有的。谢谢你的观点。我现在注意到的另一件事是:getNextId
不是一个公认的名称,因为,您调用了多少次getId
函数,它将返回1I,我也标记了C
,以找出与该语言功能相关的内容。因为在C#中,默认情况下,类的所有成员都是私有的。