• Products
  • Solutions
  • Made with Unity
  • Learning
  • Support & Services
  • Community
  • Asset Store
  • Get Unity

UNITY ACCOUNT

You need a Unity Account to shop in the Online and Asset Stores, participate in the Unity Community and manage your license portfolio. Login Create account
  • Blog
  • Forums
  • Answers
  • Evangelists
  • User Groups
  • Beta Program
  • Advisory Panel

Navigation

  • Home
  • Products
  • Solutions
  • Made with Unity
  • Learning
  • Support & Services
  • Community
    • Blog
    • Forums
    • Answers
    • Evangelists
    • User Groups
    • Beta Program
    • Advisory Panel

Unity account

You need a Unity Account to shop in the Online and Asset Stores, participate in the Unity Community and manage your license portfolio. Login Create account

Language

  • Chinese
  • Spanish
  • Japanese
  • Korean
  • Portuguese
  • Ask a question
  • Spaces
    • Default
    • Help Room
    • META
    • Moderators
    • Topics
    • Questions
    • Users
    • Badges
  • Home /
  • Help Room /
avatar image
0
Question by Jeshira · Jan 25, 2018 at 05:23 PM · c#enumnamingaccessormember variables

C# naming related enum, private member and public accessor.

Might sound petty of me, but I struggle with C# naming convention. It is fine when I only have a private member and a public accessor as follow:

 private int size;
 public int Size { get { return size;} }

but it gets confusing when you use an enum. Clearly, I can't name my accessor the same as my enum :

 public enum Size { Tiny = 0, Small = 1, Medium = 2, Large = 4}
 private Size size;
 public Size Size { get { return size;} }

By convention I shouldn't use plural enum names unless they are bitwise which it isn't. The following could solve it, but I doubt that's coding friendly when it is only a simple getter.

 public Size GetSize(){ return size; }

Is there other alternatives?

Comment
Add comment
10 |3000 characters needed characters left characters exceeded
▼
  • Viewable by all users
  • Viewable by moderators
  • Viewable by moderators and the original poster
  • Advanced visibility
Viewable by all users

2 Replies

· Add your reply
  • Sort: 
avatar image
1

Answer by Jeshira · Jan 25, 2018 at 06:14 PM

After a bit more research, I managed to find a bit of counter-intuitive information. The suggested structure is to pull the enum out of my class :

 public class Item {
     Size size;
     public Size Size { get { return size; } }
 }

 public enum Size {
     tiny = 0,
     small = 1,
     medium = 2,
     large = 4
 }

This way you are not conflicting with naming convention. Problem I see with this is you must not have more than one Size enum in the namespace.

 public class Weapon : Item {
     Type type;
     public Type Type { get { return type; } }
 }
 
 public class Armor : Item {
     Type type;
     public Type Type { get { return type; } }
 }

We'll agree armor and weapon can't have the same type. Can't nest enum due to original issue to not conflict with naming convention. So only solution left would be to rename Type into ArmorType and WeaponType, and if we are renaming them it won't conflict with accessor name right? :

 public class Weapon : Item {
     public enum WeaponType {
         ranged,
         melee
     }
 
     WeaponType type;
     public WeaponType Type { get { return type; } }
 }

But how fun will it be to type :

 Weapon.WeaponType type = Weapon.WeaponType.ranged;

So no nesting :

 public class Weapon : Item {
     
     WeaponType type;
     public WeaponType Type { get { return type; } }
 }

 public enum WeaponType {
     ranged,
     melee
 }
Comment
Add comment · Show 4 · Share
10 |3000 characters needed characters left characters exceeded
▼
  • Viewable by all users
  • Viewable by moderators
  • Viewable by moderators and the original poster
  • Advanced visibility
Viewable by all users
avatar image Harinezumi · Jan 25, 2018 at 08:24 PM 1
Share

Or you can look at it the way that you changed the name from Size to ItemSize.
In general, I'm avoiding giving too generic names, even if being within a class makes it clearer, but in the end it is nicer to have the enum independently of the class it will mostly be used, or even in a separate .cs file.

avatar image Jeshira Harinezumi · Jan 25, 2018 at 09:00 PM 1
Share

I agree. Why I say it is counter-intuitive is that it would make sense to have Item.Size.tiny, and as you say best is to avoid generic names, but Size or Type are and more are difficult to avoid without making it confusing with synonyms.

avatar image Harinezumi Jeshira · Jan 25, 2018 at 09:03 PM 1
Share

Absolutely, that's what I always tried to go for! But by now I've ran so many times into the problem of the getter being named the same as the enum type, that I don't do it anymore. Well, that's C#...

avatar image Bunny83 · Jan 26, 2018 at 04:29 AM 1
Share

I also tend to keep my namespaces (especially the global one) as clean as possible. However you should only nest types if they really only have a meaning to the outer class. If you may use the nested type elsewhere / outside the outer class it's better to declare it seperately. By convention it's actually recommended to use a seperate file which makes it easier to find it in the folder structure.

avatar image
0

Answer by unity_3-HQNOBbN6qQng · Jan 25, 2018 at 06:08 PM

put a underscore _ before your private filed. it's very common in C#. like this:


  public enum Size { Tiny = 0, Small = 1, Medium = 2, Large = 4}
  private Size _size;
  public Size Size { get { return _size;} }
Comment
Add comment · Show 2 · Share
10 |3000 characters needed characters left characters exceeded
▼
  • Viewable by all users
  • Viewable by moderators
  • Viewable by moderators and the original poster
  • Advanced visibility
Viewable by all users
avatar image Jeshira · Jan 25, 2018 at 08:46 PM 2
Share

Adding an underscore changes nothing to the problem unless you plan to rename accessor with lowercase, but doing so you conflict with naming convention of accessors.

avatar image Bunny83 Jeshira · Jan 26, 2018 at 04:25 AM 1
Share

Right, the problem is not the private field but the fact that the class has two "things" named "Size", one nested type and one property.

Your answer

Hint: You can notify a user about this post by typing @username

Up to 2 attachments (including images) can be used with a maximum of 524.3 kB each and 1.0 MB total.

Welcome to Unity Answers

The best place to ask and answer questions about development with Unity.

To help users navigate the site we have posted a site navigation guide.

If you are a new user to Unity Answers, check out our FAQ for more information.

Make sure to check out our Knowledge Base for commonly asked Unity questions.

If you are a moderator, see our Moderator Guidelines page.

We are making improvements to UA, see the list of changes.



Follow this Question

Answers Answers and Comments

482 People are following this question.

avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image

Related Questions

C# property with private set method still marked as CanWrite 0 Answers

I can access the field but it wont update the value? 3 Answers

Unity3d select random enum in another script 1 Answer

Restrict amount of multiple choices per Enum 0 Answers

how to save time and take the next variable in enum? 1 Answer

  • Anonymous
  • Sign in
  • Create
  • Ask a question
  • Spaces
  • Default
  • Help Room
  • META
  • Moderators
  • Explore
  • Topics
  • Questions
  • Users
  • Badges