Как использовать переменные в функции переопределения из унаследованного класса?C#

Место общения программистов C#
Ответить
Гость
 Как использовать переменные в функции переопределения из унаследованного класса?

Сообщение Гость »


У меня есть два класса (один из которых унаследован от другого), и я хочу переопределить одну из функций, которые я определил в классе, однако при попытке использовать переменные, определенные в унаследованном классе, выдается ошибка «Переменная». недоступен из-за уровня защиты. Я предполагаю, что это связано с тем, что он пытается использовать переменные в унаследованном классе, а не в классе, в котором находится переопределение, но я не уверен, как заставить единство использовать переменные в класс, а не тот, который находится в унаследованном классе.
Пример:

Код: Выделить всё

public class InheritedClass : MonoBehaviour
{
public int x;
public virtual void Divideby2(int num) {
Debug.Log(num/2);
}
}

Код: Выделить всё

public class Inheritor1 : InheritedClass
{
}

Код: Выделить всё

public class Inheritor2 : InheritedClass
{
public override void DivideBy2(int num) {
Debug.Log(num/x)
}
}
This is a simplified version of what I have where InheritedClass is a class/script which I have multiple other class/scripts inheriting from (Inheritor1 and Inheritor2) however I want to override the function in one of the scripts (Inheritor2) by using its x variable but in this case I would get the error: Assets\Scripts\Inheritor2.cs(4,14): error CS0122: 'InheritedClass.x' is inaccessible due to its protection level
Actual code

Код: Выделить всё

public class Weapon : MonoBehaviour
{
public GameObject AttackPrefab, SpecialPrefab, ThisWeaponPrefab, AttackSequenceFinisherPrefab;
private Vector3 MousePosition;
[SerializeField] private float SpecialCooldown, AttackCooldown, FinisherCooldown, AttackSequenceTimeToEnd;
private float TimePassed, RotationY, TimeToHold, AttackSequenceEndTime, SpecialCooldownTimer, FinisherCooldownTimer;
public int MaxAttackSequence;
[HideInInspector] public int AttackSequence;
private bool CanSpecial, CanAttack;

public virtual void AttackDetermine(int num)
{
MousePosition = Input.mousePosition;
if (MousePosition.x < 0) {MousePosition.x = 0;}
if (MousePosition.x > Screen.width) {MousePosition.x = Screen.width;}
if (MousePosition.y < 0) {MousePosition.x = 0;}
if (MousePosition.y > Screen.height) {MousePosition.x = Screen.height;}
MousePosition.y -= (Screen.height / 2);
MousePosition.x -= (Screen.width / 2);
RotationY = Mathf.Atan2(MousePosition.y, MousePosition.x) * Mathf.Rad2Deg - 90;
if ((num == 2) & (Character.instance.BusyTime = 0)){
CanSpecial = true;
}
else if ((num == 1) & (Character.instance.BusyTime  Screen.height) {MousePosition.x = Screen.height;}
MousePosition.y -= (Screen.height / 2);
MousePosition.x -= (Screen.width / 2);
RotationY = Mathf.Atan2(MousePosition.y, MousePosition.x) * Mathf.Rad2Deg - 90;
Vector3 relativePos = Character.instance.InGameCharacter.transform.position - Enemy.instance.InGameCharacter.transform.position;
RotationEnemy = Quaternion.LookRotation(relativePos, Vector3.up);
if ((num == 2) & (Character.instance.BusyTime = 0)){
CanSpecial = true;
}
else if ((num == 1) & (Character.instance.BusyTime 

Источник: [url]https://stackoverflow.com/questions/78140236/how-do-you-use-varaibles-within-an-override-function-from-an-inherited-class[/url]
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»