C# 设置抽象类变量值的正确方法
我有一个cC# 设置抽象类变量值的正确方法,c#,oop,unity3d,C#,Oop,Unity3d,我有一个camerascript类,它执行剔除任务,它包含以下变量和一个事件: protected float CullDetailSmall = 25.0f; protected float CullDetailMedium = 80.0f; protected float CullDetailLarge = 130.0f; protected float CullDetailExtraLarge = 250.0f; protected float Cu
amerascript
类,它执行剔除任务,它包含以下变量和一个事件:
protected float CullDetailSmall = 25.0f;
protected float CullDetailMedium = 80.0f;
protected float CullDetailLarge = 130.0f;
protected float CullDetailExtraLarge = 250.0f;
protected float CullDetailXExtraLarge = 450.0f;
protected float CullDetailXXExtaLarge = 650.0f;
public virtual void Awake(){
//culling apply logic using above variable values
}
camera脚本
类是CamFly
和CamWalk
的基类。现在我想更改基类camera脚本
变量值,因此我在每个类(CamFly
和CamWalk
)中创建此函数
它工作得很好,做了我想做的事情,但它肯定不是一段好代码。我很高兴我怎么才能正确地做呢??记得吗
Camera
脚本类,它包含这些变量和一个事件
我没有看到任何事件,我看到一个名为Awake
的无效返回虚拟方法
它工作得很好,做了我想做的事情,但它肯定不是一段好代码
你怎么会这么想?是的,它是可以改进的,但我见过更糟的
我感到困惑的是,我怎样才能正确地做这件事
是的,有时这会发生在所有人身上
我的两分钱建议:
SetCullingValues
没有明确说明该方法也将调用Awake
。可以调用它SetCullingValues和away
,也可以不调用away
SetCullingValues
甚至在派生类型中声明?在基类型中声明它李>
1和3假设您有权访问
摄像机
。如果您没有这样做,那么您就无法改进现有的功能。请查看Microsoft的下一个链接,其中包含相关的抽象类文档和最佳实践
抽象类用作派生类的基模板。它用于强制执行设计规则
abstract class YourClass
{
public int a;
public abstract void A();
}
class Example : YourClass
{
public override void A()
{
Console.WriteLine("Example.A");
base.a++;
}
}
我不明白你的问题。“当然不是一段好的代码”是什么让你这么想的?除了
base
标识符是冗余的这一事实之外,我认为这段代码没有任何问题。为什么你认为它不好?当我想在两个类中使用相同的功能时,它就不应该是多余的。您可以看到两个方法和两个冗余代码。为什么不在基类中输入元素SetCullingValues
?Awake()
不是一个“事件”,而是由Unity调用的消息。因此,您不需要从其他方法调用它。您应该正确命名该方法,并且只在Awake
中使用它。。。会更干净。唤醒
是一个事件。我无法直接获取相机脚本,因为它是飞行和行走摄像头的基类。@MuhammadFaizanKhan José试图在这里正确地说明的是,在您的情况下,实际上根本不需要/引用使用abstract
<代码>虚拟也可用于非抽象类。
abstract class YourClass
{
public int a;
public abstract void A();
}
class Example : YourClass
{
public override void A()
{
Console.WriteLine("Example.A");
base.a++;
}
}