Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

You must login to ask a question.

Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

The Archive Base

The Archive Base Logo The Archive Base Logo

The Archive Base Navigation

  • SEARCH
  • Home
  • About Us
  • Blog
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • Add group
  • Groups page
  • Feed
  • User Profile
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Buy Points
  • Users
  • Help
  • Buy Theme
  • SEARCH
Home/ Questions/Q 3427648
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: May 18, 20262026-05-18T06:51:46+00:00 2026-05-18T06:51:46+00:00

class TestClass { private string _privateString = hello; void ChangeData() { TestClass otherTestClass =

  • 0
class TestClass
{
    private string _privateString = "hello";
    void ChangeData()
    {
        TestClass otherTestClass = new TestClass();
        otherTestClass._privateString = "world";
    }
}

This code compiles in C# and the equivalent works in PHP, but can someone explain the reason why otherTestClass._privateString can be changed here ?

I would have thought an instance of a class should not be able to change a private member variable under any circumstances, and that trying to access otherTestClass._privateString would give an ‘inaccessible due to protection level’ error.

This is not the case though, so why does instantiating an object inside its own class let you access the private members ? And should it, doesn’t this break encapsulation to an extent ? Or am I missing something obvious ?

  • (I’m not asking if the above class design is good practice, just wondering about the theory behind it.)

Edit – Thanks for the answers and comments. To clarify, I’m also interested in knowing if being able to do this is regarded as a positive feature, or if it’s a necessary tradeoff for better compile-time checking/code clarity/because most other languages do it that way or whatever. It seems to me ideally the compiler would prevent or warn you about this, but then I’m far from a language designer. Any examples of how it being this way lets you do something useful (without violating encapsulation) that would otherwise be difficult or impossible would be great.

  • 1 1 Answer
  • 0 Views
  • 0 Followers
  • 0
Share
  • Facebook
  • Report

Leave an answer
Cancel reply

You must login to add an answer.

Forgot Password?

Need An Account, Sign Up Here

1 Answer

  • Voted
  • Oldest
  • Recent
  • Random
  1. Editorial Team
    Editorial Team
    2026-05-18T06:51:46+00:00Added an answer on May 18, 2026 at 6:51 am

    Private members are accessible to any code within the program text of that class (including within nested types). It has nothing to do with which instance of the class you’re dealing with.

    I don’t believe this violates encapsulation – the API is still separated from the implementation, but the implementation “knows” about itself regardless of which instance it’s looking at.

    I believe that in some other languages this isn’t how accessibility works, but it definitely is for C# and Java. (Java has slightly different rules about what can access private members, but the translated code for what you’ve written would still work.)

    • 0
    • Reply
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

Sidebar

Related Questions

public class TestClass{ private String divisions[] ={}; public void doAction(){ Collection testArray = new
Consider this: public class TestClass { private String a; private String b; public TestClass()
My jpa looks like below public class TESTClass implements Serializable { ... private String
Why is this java class not Thread safe. class TestClass { private int x;
Given the following class: class TestClass { public void SetValue(int value) { Value =
Okay, let's say we have a class defined like public class TestClass { private
Say I have a class: public class TestClass { public String Str1; public String
I recently implemented a class like: class TestClass : IDisposable { RegistryKey m_key; public
class A : IFoo { } ... A[] arrayOfA = new A[10]; if(arrayOfA is
if i have a private property in a class, i'm wondering what technically the

Explore

  • Home
  • Add group
  • Groups page
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Users
  • Help
  • SEARCH

Footer

© 2021 The Archive Base. All Rights Reserved
With Love by The Archive Base

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.