추상 클래스에서 'this'를 사용할 수있는 이유에 대해 약간 혼란 스럽습니다.추상 클래스의 'this'키워드
나는 아주 아주 간단한 객체 지향적 인 역할 놀이 게임을 만들고있다. base/super class는 Items
입니다. 나는 equiptable과 non-equiptable의 두 가지 유형의 아이템을 가지고있다.
interface IEquiptable
{
void equiptItem(Player p);
void unequiptItem(Player p);
}
해당 항목에 대한 인터페이스입니다. 이것은 (쇼 그렇게 가치가이 클래스는 순간에있는 항목의 이름을 포함) Items
의 기본 클래스를 확장
abstract class Weapons : Items, IEquiptable
{
public double powerOfWeapon { get; set; }
public double powerNeededToUse { get; set; }
public void equiptItem(Player p)
{
Console.WriteLine(this);
p.weapon = this;
}
public void unequiptItem(Player p)
{
//UNTESTED METHOD
p.weapon = new Swords("Fists", 1, 1);
}
}
및 구현 :
다음, 나는 추상 클래스는 Weapons
라는이 인터페이스 'IEquiptable'.
마지막으로 나는 Swords
class Swords : Weapons
{
public Swords(string name, double powerOfS, double powerToU)
{
base.name = name;
powerOfWeapon = powerOfS;
powerNeededToUse = powerToU;
}
}
이 무기 확장하고 칼의 생성자를 제공라는 클래스가 있습니다. 이 작품 왜 이해가 안
public void equiptWeapon()
{
Weapons tempWep = items.OfType<Weapons>().FirstOrDefault();
if (tempWep != null)
{
tempWep.equiptItem(this);
}
}
(내 플레이어 클래스) :
은 여기 내 Player
클래스
class Player
{
public string Name { get; set; }
public double life { get; set; }
public double power { get; set; }
public Weapons weapon { get; set; } // Currently held weapon
private List<Items> items; //This is being used to represent a 'backpack' any item obtained will be added here.
중 일부는 내가이 방법을 사용하고 무기를 eqipt이다. tempWep에 목록의 첫 번째 무기 값이 제공됩니다. 하지만 그때 그것은 추상적 인 클래스에 의해 구현되고있는 equiptItem()
메서드를 호출하고 나서 'this'가 할당되는 중입니다. 초기화되지 않는 오류를 던지지 않는 방법을 따를 수 없습니다. Weapons
내가 무슨 뜻인지 이해해.
감사합니다.
무기에는 장비가 장착되어 있지 않습니다. 'Person'은'Equip' 메소드를 가져야합니다. 그것과 관계없이 추상 클래스는 결국 직접 인스턴스화 할 수는 없지만 결국 객체를 나타냅니다. 따라서 '이'입니다. – SimpleVar
당신이 여기서하고있는 일은 무기를 장비하라는 것을 말하는 것이며, 무기를 장비에 설치하여 그 사람이 그 장비에 장비를 갖도록 지시하면 무기는 실제로 사람에게 장비됩니다. 그건 핑퐁이야. – SimpleVar
아마도 도움이 될 것입니다. 정신적으로 "this"를 사용하는 모든 메서드가 이제 * 정적 * 메서드라고 상상해보십시오. 이제'_this'라는 메소드에 형식 매개 변수를 추가하십시오. 정신적으로 모든 '이'를'_ '로 대체하십시오. 속성의 경우 정적 메서드라고 가정합니다. static int get_Color (Shape _this) {return _this.color; }'및 setter에 대해서도 마찬가지입니다. 모든 방법이 정적이고 아무도 '이'를 사용하지 않는 세상에서 이의가 있습니까? * 기본적으로 어떻게 작동하는지 * 때문입니다. 'this'는 숨겨진 형식 매개 변수가 있다는 규칙 일뿐입니다. –